Mam tabeli MySQL:Czy indeks MySQL może wykorzystywać indeks w zapytaniu o zakres, z zamówieniem?
CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT,
other_id INT NOT NULL,
expiration_datetime DATETIME,
score INT,
PRIMARY KEY (id)
)
trzeba uruchomić zapytanie w formie:
SELECT * FROM mytable
WHERE other_id=1 AND expiration_datetime > NOW()
ORDER BY score LIMIT 10
Jeśli dodać ten indeks mojatabela:
CREATE INDEX order_by_index
ON mytable (other_id, expiration_datetime, score);
Czy MySQL być w stanie użyć całego order_by_index
w powyższym zapytaniu?
Wydaje się, że powinna być w stanie, ale według MySQL documentation: "indeksu może być również używany, nawet jeśli ORDER BY nie pasuje indeks dokładnie, jak długo wszystkich nieużywanych częściach index i wszystkie dodatkowe kolumny ORDER BY są stałe w klauzuli WHERE: "
Powyższy fragment wydaje się sugerować, że indeks byłby używany tylko w zapytaniu stałym, podczas gdy mój jest zapytaniem o zakres.
Czy ktoś może wyjaśnić, czy indeks byłby używany w tym przypadku? Jeśli nie, to w jaki sposób mogę wymusić użycie indeksu?
Dzięki.
>> Nie można użyć indeksu do porządku przez, ponieważ nie jesteś porównując expiration_datetime do stałej. << Myślę, że tutaj jest błąd. Dobrze wyjaśniłeś przyczynę tego w drugiej części odpowiedzi. – kellogs