Tôi có một bảng MySQL:MySQL có thể sử dụng chỉ mục trong RANGE QUERY với ORDER BY không?
CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT,
other_id INT NOT NULL,
expiration_datetime DATETIME,
score INT,
PRIMARY KEY (id)
)
tôi cần phải chạy truy vấn theo hình thức:
SELECT * FROM mytable
WHERE other_id=1 AND expiration_datetime > NOW()
ORDER BY score LIMIT 10
Nếu tôi thêm chỉ số này để MyTable:
CREATE INDEX order_by_index
ON mytable (other_id, expiration_datetime, score);
Sẽ MySQL được có thể sử dụng toàn bộ số order_by_index
trong truy vấn ở trên không? Có vẻ như nó sẽ có thể, nhưng sau đó theo số documentation của MySQL: "Chỉ mục cũng có thể được sử dụng ngay cả khi ORDER BY không khớp chính xác với chỉ mục, miễn là tất cả các phần chưa sử dụng của chỉ mục và tất cả các cột ORDER BY phụ khác là hằng số theo mệnh đề WHERE "
Đoạn trên dường như cho thấy chỉ mục sẽ chỉ được sử dụng trong truy vấn liên tục trong khi tôi là truy vấn phạm vi.
Có ai có thể làm rõ nếu chỉ mục sẽ được sử dụng trong trường hợp này không? Nếu không, bất kỳ cách nào tôi có thể buộc sử dụng chỉ mục?
Cảm ơn.
>> Nó không thể sử dụng các chỉ số cho thứ tự bởi vì bạn không so sánh expiration_datetime đến một hằng số. << Tôi nghĩ có một sai lầm ở đây. Bạn đã giải thích rõ nguyên nhân của điều đó trong phần thứ hai của câu trả lời. – kellogs