Para responder a su pregunta en resumen, db_query es el más rápido. Aquí hay algunas razones, hechos y cifras compilados de diferentes preguntas, fuentes:
Una simple búsqueda en Google de esta pregunta, ofrece los siguientes resultados:
For simple queries, db_query() is 22% faster than db_select()
For simple queries, db_query() is 124% faster than EFQ
For queries with two joins, db_query() is 29% faster than db_select()
y esto
db_query():
Total Incl. Wall Time (microsec): 796 microsecs
Total Incl. CPU (microsecs): 0 microsecs
Total Incl. MemUse (bytes): 123,352 bytes
Total Incl. PeakMemUse (bytes): 124,248 bytes
Number of Function Calls: 38
db_select()
Total Incl. Wall Time (microsec): 1,118 microsecs
Total Incl. CPU (microsecs): 0 microsecs
Total Incl. MemUse (bytes): 425,216 bytes
Total Incl. PeakMemUse (bytes): 436,392 bytes
Number of Function Calls: 88
Si observa lo anterior, db_select realiza más llamadas a funciones y utiliza más memoria que db_query.
- Consulte aquí por razones sobre por qué usar db_select
- Consulte aquí los motivos por los que debe utilizar EntityFieldQuery sobre db_select
- Consulte aquí para comparar el rendimiento de db_query y db_select
Supongo que la elección debe basarse únicamente en sus requisitos. EntityFieldQuery puede ser más lento, pero ofrece muchas ventajas, como la sintaxis simple, el almacenamiento de campo es conectable, el acoplamiento suelto y muchos más.