Коротше, щоб відповісти на ваше запитання, db_query - найшвидший! Ось деякі причини, факти та цифри, зібрані з різних питань, джерел:
Простий гугл цього питання, і дають такі результати:
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()
і це
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
Якщо ви помітили вище, db_select робить більше функціональних дзвінків та використовує більше пам'яті, ніж db_query.
- Дивіться тут причини, чому слід використовувати db_select
- Дивіться тут причини, чому слід використовувати EntityFieldQuery над db_select
- Дивіться тут для порівняння продуктивності db_query та db_select
Гадаю, вибір повинен базуватися виключно на ваших вимогах. EntityFieldQuery може бути повільнішим, але пропонує безліч переваг, таких як простий синтаксис, зберігання в полі підключається, нещільне з'єднання та багато іншого.