2014-07-14 7 views
6

Widziałem to kilka razy, ale mogłem źle interpretować plan zapytania EXPLAIN.W Mysql, dlaczego nieużywane indeksy wpływają na plan zapytania?

Załóżmy, że mam tabelę (col1, col2). Chcę dołączyć do innej tabeli zarówno dla col1, jak i dla col2. Więc tworzę indeks (col1, col2). Czasami EXPLAIN pokazuje, że indeks nie jest używany. Być może jakiś inny nieefektywny indeks jest używany lub wcale go nie ma.

Ale jeśli utworzę inny indeks (col1), zostanie użyty pierwszy indeks (col1, col2).

Czy ktoś kiedyś miał to już wcześniej? Czy masz pojęcie, dlaczego tak się stało?

Moja teoria jest taka, że ​​nieużywany indeks zapewnia dokładniejsze statystyki dotyczące tabeli, która wskazuje plan kwerendy na użycie pierwszego indeksu. Ale nie jestem dostatecznie zaznajomiony z wewnętrznym działaniem mysql, aby wiedzieć, czy to prawda, czy jak to udowodnić.

Odpowiedz

2

Dokumentacja MySQL dla ALTER TABLEstates, która może wymagać uruchomienia na niej ANALYZE TABLE, aby odświeżyć liczność indeksu, co uważam za czynnik w zachowaniu, które widzisz. Ponadto optymalizator zapytań zwykle obsługuje puste (lub prawie puste) tabele zupełnie inne niż wypełnione tabele, i często wykonuje pełne skanowanie tabeli zamiast korzystania z indeksu, gdy istnieje tylko kilka wierszy. Dla mojego własnego rozwoju na $work nie mogę polegać na wyjściu EXPLAIN z mojej bazy danych dev z tego powodu.

+0

Ma to sens. Niestety, nie mogę już odtworzyć problemu z moją bazą danych, zapytaniami i indeksami - prawdopodobnie dlatego, że statystyki danych zostały zaktualizowane podczas użytkowania. To wydaje się być właściwą odpowiedzią, chociaż nie mogę tego udowodnić za pomocą moich danych. Pozwól mi dać innym szansę na odpowiedź, ale to wygląda dobrze. – kane

Powiązane problemy