KHÔNG BAO GIỜ sử dụng bộ chọn như DATE(datecolumns) = '2012-12-24'
- nó là một kẻ giết người hiệu suất:
- nó sẽ tính toán
DATE()
cho tất cả các hàng, kể cả những hàng không khớp
- nó sẽ làm cho không thể sử dụng một chỉ mục cho truy vấn
Nó nhanh hơn nhiều để sử dụng
SELECT * FROM tablename
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'
vì điều này sẽ cho phép sử dụng chỉ mục mà không cần tính toán.
BIÊN TẬP
Như được sử dụng bởi used_By_Al yet, trong thời gian kể từ câu trả lời bẩm sinh năm 2012, đã xuất hiện các phiên bản MySQL, trong đó sử dụng '23: 59: 59 'khi kết thúc một ngày không còn an toàn. Một phiên bản cập nhật nên đọc
SELECT * FROM tablename
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'
Ý chính của câu trả lời, tức là việc tránh bộ chọn trên biểu thức tính toán, tất nhiên vẫn đứng vững.