Per rispondere alla tua domanda in breve, db_query è il più veloce! Ecco alcuni motivi, fatti e cifre compilati da diverse domande, fonti:
Un semplice googling di questa domanda, fornisce i seguenti risultati:
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()
e questo
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
Se noti sopra db_select, effettua più chiamate di funzione e utilizza più memoria di db_query.
- Vedi qui per motivi sul perché usare db_select
- Vedi qui per motivi sul perché usare EntityFieldQuery su db_select
- Vedi qui per il confronto delle prestazioni di db_query e db_select
Immagino che la scelta debba basarsi esclusivamente sulle tue esigenze. EntityFieldQuery potrebbe essere più lento, ma offre molti vantaggi come la sintassi semplice, l'archiviazione sul campo è innestabile, l'accoppiamento libero e molti altri.