Krótko mówiąc, aby odpowiedzieć na twoje pytanie, db_query jest najszybszy! Oto kilka powodów, faktów i liczb zebranych z różnych pytań, źródeł:
Proste wyszukiwanie w Google na to pytanie, wymyśl następujące wyniki:
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()
i to
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
Jeśli zauważysz powyżej, db_select wykonuje więcej wywołań funkcji i wykorzystuje więcej pamięci niż db_query.
- Zobacz tutaj powody, dla których warto używać db_select
- Zobacz tutaj powody, dla których warto używać EntityFieldQuery zamiast db_select
- Zobacz tutaj porównanie wydajności db_query i db_select
Myślę, że wybór powinien opierać się wyłącznie na twoich wymaganiach. EntityFieldQuery może być wolniejszy, ale oferuje wiele zalet, takich jak prosta składnia, pamięć w terenie jest podłączana, luźne sprzęganie i wiele innych.