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