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

Tại sao mysql nhấn chỉ mục khi bao bọc cột với hàm ngày

Báo cáo EXPLAIN được biết là khó diễn giải. Họ đã nạp quá nhiều thông tin vào một vài trường. Bạn có thể thử

type: index cho biết nó đang thực hiện quét chỉ mục , có nghĩa là nó đang truy cập mọi mục nhập trong chỉ mục.

Thao tác này truy cập cùng một số lượng mục nhập như quét bảng, ngoại trừ nó dựa trên chỉ mục phụ thay vì chỉ mục được phân cụm (chính).

Khi chúng tôi thấy type: index , EXPLAIN hiển thị possible_keys: NULL có nghĩa là nó không thể sử dụng bất kỳ chỉ mục nào để tìm kiếm hiệu quả. Nhưng nó cũng hiển thị key: add_time có nghĩa là chỉ mục mà nó sử dụng để quét chỉ mục là add_time .

Việc quét chỉ mục là do MySQL không thể tự tối ưu hóa các biểu thức hoặc hàm gọi. Ví dụ:nếu bạn cố gắng tìm kiếm các ngày với một tháng cụ thể, bạn có thể tìm kiếm month(add_time) = 4 nhưng điều đó sẽ không sử dụng chỉ mục trên add_time vì các ngày có tháng đó nằm rải rác trong chỉ mục, không phải tất cả được nhóm lại với nhau.

Bạn có thể biết rằng date(add_time) sẽ có thể được tìm kiếm bằng chỉ mục, nhưng MySQL không đưa ra suy luận đó. MySQL chỉ thấy rằng bạn đang sử dụng một hàm và nó thậm chí không cố gắng sử dụng chỉ mục.

Đó là lý do tại sao MySQL 5.7 đã giới thiệu các cột được tạo để cho phép chúng tôi lập chỉ mục một biểu thức và MySQL 8.0 đã làm cho nó tốt hơn bằng cách cho phép chỉ mục để xác định cho một biểu thức mà không yêu cầu chúng tôi xác định cột đã tạo trước.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn sql thô Symfony2.3 với Mệnh đề IN

  2. Mối quan hệ giữa văn bản và danh sách từ khóa?

  3. Thay đổi truy vấn SQL từ một điều kiện thành một số điều kiện

  4. MySQL:Các bản ghi được chèn theo giờ, trong 24 giờ qua

  5. Tổng tích lũy MySQL được nhóm theo ngày