Если коротко ответить на ваш вопрос, 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 может быть медленнее, но предлагает много преимуществ, таких как простой синтаксис, возможность хранения полей с возможностью подключения, слабая связь и многие другие.