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

MySQL ngừng sử dụng chỉ mục khi các ràng buộc bổ sung được thêm vào

Điều này hơi khó giải thích.

Truy vấn sử dụng chỉ mục đang sử dụng nó vì chỉ mục là chỉ mục "bao trùm". Có nghĩa là, tất cả các cột trong chỉ mục đều nằm trong truy vấn. Phần duy nhất của chỉ mục thực sự được sử dụng hiệu quả là điều kiện về latitude .

Thông thường, một chỉ mục bao trùm sẽ có chỉ các cột được đề cập trong truy vấn. Tuy nhiên, khóa chính được sử dụng để tham chiếu các bản ghi, vì vậy tôi đoán rằng users.Id là khóa chính trên bảng. Và chỉ mục đang được quét để tìm các giá trị hợp lệ của latitude .

Truy vấn không sử dụng chỉ mục không sử dụng nó vì hai lý do. Đầu tiên, các điều kiện trên các cột là bất bình đẳng. Một tìm kiếm chỉ mục chỉ có thể sử dụng các điều kiện bình đẳng và một điều kiện bất bình đẳng. Điều đó có nghĩa là chỉ mục chỉ có thể được sử dụng cho latitude trong phương pháp hiệu quả nhất của nó. Thứ hai, các cột bổ sung trong truy vấn vẫn yêu cầu chuyển đến trang dữ liệu.

Nói cách khác, trên thực tế, trình tối ưu hóa nói:"Tại sao phải vào chỉ mục để quét qua chỉ mục và sau đó quét các trang dữ liệu? Thay vào đó, tôi có thể chỉ cần quét các trang dữ liệu và nhận mọi thứ cùng một lúc."

Câu hỏi tiếp theo của bạn chắc chắn là:"Nhưng làm cách nào để tôi thực hiện truy vấn của mình nhanh hơn?" Đề xuất của tôi là điều tra chỉ mục không gian .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự cố với kiểm tra cơ sở dữ liệu laravel 7.x

  2. MySQL / PHP - phân trang số trang Chỉ hiển thị 10 trang cùng lúc

  3. ORDER BY có áp dụng trước hay sau DISTINCT không?

  4. java.sql.SQLException:Chỉ mục tập hợp ký tự ban đầu không xác định '255' nhận được từ máy chủ cho trình kết nối 8.0.11

  5. Cách nhận giá trị cho mỗi ngày trong tháng