/ / Jak rozpoznać, które indeksy nie są używane? - php, mysql, wydajność, optymalizacja, indeksowanie

Jak rozpoznać, które indeksy nie są używane? - php, mysql, wydajność, optymalizacja, indeksowanie

Mam tabelę w MySQL z 7 indeksami, w większościsą w więcej niż jednej kolumnie. Myślę, że tutaj jest za dużo indeksów. Czy istnieje sposób, aby uzyskać statystyki dotyczące tego, które indeksy są używane przez wszystkie tysiące zapytań do tej bazy danych, a które są mniej warte, więc wiem, jaki indeks należy rozważyć w pierwszej kolejności?

Odpowiedzi:

3 dla odpowiedzi № 1

Możesz spróbować ustalić które indeksy są w ogóle używane.

Jednak jeśli chodzi o listę pod względem przydatności, przepraszam, nie ma wbudowanego sposobu, aby to zrobić, i nie sądzę, że Query Analyzer to robi.

Wygląda na to, że konieczne może być przeprowadzenie audytu w celu ustalenia używanych zapytań, które wpływają na tę tabelę, i wyjaśnienie, czy używają któregoś z twoich indeksów.

Jest raport o błędzie żądając tej funkcji.


1 dla odpowiedzi nr 2

Powinieneś sprawdzić łatki Percona lub ich kompilacje serwerów. Dodali tabele do INFORMACJE_SCHEMA, abyś mógł znaleźć nieużywane indeksy.

Spinki do mankietów:


0 dla odpowiedzi № 3

To nie jest konkretny sposób, aby to zrobić, ale możesz to stwierdzić. Spróbuj EXPLAIN SELECT... i pokaże, jakie tabele są używane, ile wierszy itp. itp. To powinno dać ci wystarczającą ilość danych, aby przyspieszyć twoją tabelę


0 dla odpowiedzi nr 4

Włącz ogólne rejestrowanie zapytań w produkcji. Tak, wiem, że to jest ból i wiem, że wpłynie to na twój serwer produkcyjny, ale BITE THE BULLET. Przyda się później. Pozostaw to włączone na czas nieokreślony, jeśli to możliwe (oczywiście upewnij się, że rotacja, kompresja i wygaśnięcie dziennika działają i zdecydowanie monitoruj wykorzystanie miejsca na dysku; powiedz Opsowi, jak je wyłączyć, jeśli zdarzy się coś złego)

Następnie możesz zacząć grać z narzędziami takimi jakmk-query-digest, który uruchomi EXPLAIN na wszystkich twoich zapytaniach (zrób to oczywiście z nieprodukcyjną bazą danych, ale skorzystaj z ostatniego zrzutu bazy danych).

Umożliwi to określenie, które indeksy są używane i jak często. Przynajmniej jeśli EXPLAIN nie kłamie, a serwer testowy używa tego samego planu co produkcja.

A przynajmniej tak będzie. EXPLAIN jeszcze nie mówi, jak działają zapytania DELETE, UPDATE.