Để trả lời câu hỏi của bạn một cách ngắn gọn, db_query là nhanh nhất! Dưới đây là một số lý do, sự kiện và con số được tổng hợp từ các câu hỏi, nguồn khác nhau:
Một câu hỏi đơn giản về câu hỏi này, đưa ra kết quả như sau:
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()
và điều này
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
Nếu bạn nhận thấy ở trên db_select thực hiện nhiều cuộc gọi hàm hơn và sử dụng nhiều bộ nhớ hơn db_query.
- Xem ở đây để biết lý do tại sao sử dụng db_select
- Xem ở đây để biết lý do tại sao nên sử dụng EntityFieldQuery qua db_select
- Xem ở đây để so sánh hiệu suất của db_query và db_select
Tôi đoán sự lựa chọn chỉ nên dựa trên yêu cầu của bạn. EntityFieldQuery có thể chậm hơn, nhưng cung cấp nhiều lợi thế như cú pháp đơn giản, lưu trữ trường có thể cắm được, khớp nối lỏng lẻo và nhiều hơn nữa.