Pour répondre à votre question en bref, db_query est le plus rapide! Voici quelques raisons, faits et chiffres compilés à partir de différentes questions, sources:
Une simple recherche sur Google de cette question donne les résultats suivants:
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()
et ça
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 vous remarquez ci-dessus, db_select effectue plus d'appels de fonction et utilise plus de mémoire que db_query.
- Voir ici pour savoir pourquoi utiliser db_select
- Voir ici pour savoir pourquoi utiliser EntityFieldQuery sur db_select
- Voir ici pour la comparaison des performances de db_query et db_select
Je suppose que le choix devrait être uniquement basé sur vos besoins. EntityFieldQuery peut être plus lent, mais offre de nombreux avantages tels qu'une syntaxe simple, le stockage sur le terrain est enfichable, un couplage lâche et bien d'autres.