W tym artykule omówiono indeksy i sposoby ich wykorzystania do poprawy wydajności zapytań do bazy danych MySQL.
Wydajność bazy danych i indeksy
Indeksy bazy danych w MySQL umożliwiają przyspieszenie wydajności SELECT instrukcje zapytań. W przypadku małych tabel indeks niewiele pomaga. Jeśli jednak masz tabele z dużą ilością danych, indeksy mogą znacznie poprawić wydajność.
Poniższe zachowania wskazują, że dodawanie indeksów może przynieść korzyści tabelom:
- Twoja witryna ładuje się bardzo wolno lub wcale.
- Aplikacja nie może połączyć się ze swoją bazą danych.
- Kwerendy do bazy danych mają kopię zapasową.
Jeśli wystąpi którykolwiek z tych problemów, należy przeanalizować zapytania do bazy danych i rozważyć dodanie indeksów.
Jeśli masz zarządzany serwer VPS lub zarządzany serwer dedykowany, oprócz dodawania indeksów może również pomóc zwiększony rozmiar bufora sortowania. Otwórz zgłoszenie w portalu klienta pod adresem https://my.a2hosting.com, aby omówić tę opcję z naszą załogą Guru.Analiza zapytań do bazy danych
Aby określić, które tabele mogą skorzystać na użyciu indeksów, należy przeanalizować zapytania bazy danych. WYJAŚNIJ WYBÓR oświadczenie pomoże ci to zrobić. Aby przeanalizować zapytania do bazy danych, wykonaj następujące kroki:
- Zaloguj się na swoje konto za pomocą SSH.
- W wierszu poleceń wpisz następujące polecenie, zastępując nazwa użytkownika z nazwą użytkownika konta A2 Hosting i bazą danych z nazwą bazy danych:
mysql -u username -p database
- Po wyświetleniu monitu Wprowadź hasło wpisz swoje hasło. Pojawi się monit mysql>.
-
Wpisz następujące polecenie SQL:
EXPLAIN SELECT * FROM table_name WHERE conditions \G
Jeśli piszesz własny kod aplikacji, znasz już SELECT oświadczenia używane do pobierania danych. Jeśli korzystasz z aplikacji innej firmy, takiej jak WordPress lub PrestaShop, może być konieczne sprawdzenie kodu źródłowego lub dzienników bazy danych w celu określenia dokładnego SELECT oświadczenia używane do pobierania danych. -
Dane wyjściowe z WYJAŚNIJ WYBÓR Instrukcja pokazuje, jak optymalizator zapytań MySQL wykona zapytanie. Rozważmy na przykład następujące dane wyjściowe:
mysql> EXPLAIN SELECT title FROM employees WHERE lastname LIKE 'T%' \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: employees type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 142 Extra: Using where 1 row in set (0.00 sec)
W tym przykładzie dane wyjściowe:
- Possible_keys i klucz obie wartości to NULL , co oznacza, że MySQL nie ma indeksu, którego mógłby użyć dla tego zapytania.
- Wiersze wartość wskazuje, że MySQL odczyta 142 wiersze dla tego zapytania. Jeśli w tabeli są 142 wiersze, oznacza to, że MySQL musi zbadać każdy wiersz, aby wygenerować zestaw wyników. W przypadku dużego stołu może to zająć trochę czasu.
Z drugiej strony, gdybyśmy mieli stworzyć indeks o nazwie index_name dla nazwiska kolumna MySQL może wygenerować następujące dane wyjściowe dla tego samego zapytania:
mysql> EXPLAIN SELECT title FROM employees WHERE lastname LIKE 'T%' \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: employees type: range possible_keys: index_name key: index_name key_len: 22 ref: NULL rows: 17 Extra: Using where; Using index 1 row in set (0.00 sec)
Jak widać, possible_keys i klucz wartości wskazują, że MySQL znalazł indeks, którego może użyć do optymalizacji zapytania. Ponadto MySQL odczyta tylko 17 wierszy, aby wygenerować zestaw wyników, zamiast wszystkich 142 wierszy. (Oznacza to, że tabela ma 17 wierszy, w których nazwisko zaczyna się na „T”.) Na koniec Extra wartość wskazuje również, że MySQL użyje indeksu dla zapytania.
Dodawanie, usuwanie i przeglądanie indeksów w tabeli
Po przeanalizowaniu zapytań do bazy danych i określeniu, gdzie znajdują się wąskie gardła wydajności, możesz dodać indeksy. Aby to zrobić, wykonaj następujące kroki:
- Zaloguj się na swoje konto za pomocą SSH.
- W wierszu poleceń wpisz następujące polecenie, zastępując nazwa użytkownika z nazwą użytkownika konta A2 Hosting i bazą danych z nazwą bazy danych:
mysql -u username -p database
- Po wyświetleniu monitu Wprowadź hasło wpisz swoje hasło. Pojawi się monit mysql>.
-
Aby dodać indeks do tabeli, wpisz następujące polecenie SQL. Zastąp nazwa_tabeli z nazwą tabeli, index_name z nazwą nowego indeksu (który może być dowolny) i table_column z nazwą kolumny tabeli, dla której chcesz dodać indeks:
ALTER TABLE table_name ADD INDEX index_name (table_column);
Chociaż indeksy mogą poprawić wydajność, indeksy mogą również negatywnie wpływać na wydajność, jeśli jest ich zbyt wiele. Dzieje się tak, ponieważ im więcej indeksów ma tabela, tym więcej pracy musi wykonać MySQL, aby je aktualizować. Sztuka polega na znalezieniu odpowiedniej równowagi między wystarczającą liczbą indeksów, aby poprawić wydajność, ale nie tak wieloma, aby negatywnie wpływały na wydajność. -
Aby usunąć indeks z tabeli, wpisz następujące polecenie SQL. Zastąp nazwa_tabeli nazwą tabeli i zastąp index_name z nazwą indeksu, który chcesz usunąć:
ALTER TABLE table_name DROP INDEX index_name;
-
Aby wyświetlić wszystkie indeksy dla tabeli, wpisz następujące polecenie SQL. Zastąp nazwa_tabeli z nazwą tabeli:
SHOW INDEX FROM table_name \G
Po utworzeniu indeksu użyj EXPLAIN SELECT ponownie, aby zobaczyć, jak wpływa to na zapytania. Ponadto należy nadal monitorować wydajność bazy danych, aby sprawdzić, czy istnieją ulepszenia. Być może będziesz musiał przeprowadzić serię testów, aby znaleźć optymalną liczbę indeksów dla Twojej bazy danych.
Więcej informacji
- Aby uzyskać więcej informacji na temat optymalizacji i indeksów MySQL, odwiedź stronę https://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html.
- Więcej informacji na temat WYJAŚNIJ oświadczenie, odwiedź https://dev.mysql.com/doc/refman/5.5/en/explain.html.