KHÔNG BAO GIỜ BAO GIỜ sử dụng công cụ chọn như DATE(datecolumns) = '2012-12-24'
- nó là một kẻ giết người về 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ẽ khiến bạn không thể sử dụng chỉ mục cho truy vấn
Nó nhanh hơn nhiều khi 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.
CHỈNH SỬA
Như đã chỉ ra bởi used_By_Already, kể từ câu trả lời ban đầu vào năm 2012, đã có những phiên bản MySQL xuất hiện, trong đó việc sử dụng '23:59:59 'làm ngày kết thúc không còn an toàn nữa. 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 sử dụng bộ chọn trên một biểu thức được tính toán, tất nhiên vẫn có giá trị.