Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL SELECT WHERE datetime khớp với ngày (và không nhất thiết phải là thời gian)

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ị.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách hiển thị đối chiếu của một cột trong MySQL

  2. Cách tạo người dùng mới và cấp quyền trong MySQL

  3. Tính toán phần trăm từ tần suất trong MySQL

  4. Hàm SCHEMA () trong MySQL

  5. Làm cách nào để xem các truy vấn MySQL trực tiếp?