Тази статия обсъжда индексите и как можете да ги използвате, за да подобрите производителността на заявките за база данни на MySQL.
Ефективност на базата данни и индекси
Индексите на бази данни в MySQL ви позволяват да ускорите производителността на SELECT изрази за заявка. За малки таблици индексът не помага много. Въпреки това, ако имате таблици с голямо количество данни, индексите могат драстично да подобрят производителността.
Следните поведения са всички индикации, че таблиците могат да се възползват от добавянето на индекси:
- Сайтът ви се зарежда много бавно или изобщо не се зарежда.
- Приложение не може да се свърже със своята база данни.
- Заявките към базата данни са архивирани.
Ако срещнете някой от тези проблеми, трябва да анализирате заявките си към базата данни и да помислите за добавяне на индекси.
Ако имате управляван VPS или управляван специален сървър, увеличеният размер на буфера за сортиране също може да помогне в допълнение към добавянето на индекси. Моля, отворете билет на портала за клиенти на адрес https://my.a2hosting.com, за да обсъдите тази опция с нашия екип от гуру.Анализиране на заявки за база данни
За да определите кои таблици могат да се възползват от използването на индекси, трябва да анализирате заявките на вашата база данни. ИЗБИРАНЕ НА ОБЯСНЯВАНЕ изявлението ви помага да направите това. За да анализирате заявки към база данни, следвайте тези стъпки:
- Влезте в акаунта си чрез SSH.
- В командния ред въведете следната команда, като замените потребителско име с потребителското име на вашия акаунт в A2 Hosting и база данни с името на базата данни:
mysql -u username -p database
- В подканата за въвеждане на парола въведете паролата си. Появява се подканата mysql>.
-
Въведете следната SQL команда:
EXPLAIN SELECT * FROM table_name WHERE conditions \G
Ако напишете свой собствен код на приложението, значи вече знаете SELECT изрази, които използвате за извличане на данни. Ако използвате приложение на трета страна, като WordPress или PrestaShop, може да се наложи да прегледате изходния код или регистрационните файлове на базата данни, за да определите точния SELECT изрази, които се използват за извличане на данни. -
Изход от ОБЯСНИТЕ ИЗБОР оператор показва как MySQL оптимизаторът на заявки ще изпълни заявката. Например, помислете за следния изход:
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)
В този пример изход:
- Възможните_ключове иключа и двете стойности са NULL , което показва, че MySQL няма индекс, който може да използва за тази заявка.
- редовете стойност показва, че MySQL ще прочете 142 реда за тази заявка. Ако има общо 142 реда в таблицата, това означава, че MySQL трябва да проучи всеки ред, за да генерира резултатния набор. Това може да отнеме доста време за голяма маса.
От друга страна, ако трябва да създадем индекс, наречен име_индекс за фамилната колона, MySQL може да генерира следния изход за същата заявка:
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)
Както можете да видите, possible_keys иключа стойностите показват, че MySQL е намерил индекс, който може да използва за оптимизиране на заявката. Освен това MySQL ще прочете само 17 реда, за да генерира резултатния набор, вместо всичките 142 реда. (Това означава, че таблицата има 17 реда, където фамилното име започва с „T“.) И накрая, Extra value също така показва, че MySQL ще използва индекс за заявката.
Добавяне, премахване и преглед на индекси в таблица
След като анализирате заявките си към базата данни и определите къде са тесните места в производителността, сте готови да добавите индекси. За да направите това, изпълнете следните стъпки:
- Влезте в акаунта си чрез SSH.
- В командния ред въведете следната команда, като замените потребителско име с потребителското име на вашия акаунт в A2 Hosting и база данни с името на базата данни:
mysql -u username -p database
- В подканата за въвеждане на парола въведете паролата си. Появява се подканата mysql>.
-
За да добавите индекс към таблица, въведете следната SQL команда. Заменете име_на_таблица с името на таблицата, име_индекс с името на новия индекс (който може да бъде каквото пожелаете) и table_column с името на колоната на таблицата, за която искате да добавите индекса:
ALTER TABLE table_name ADD INDEX index_name (table_column);
Въпреки че индексите могат да подобрят производителността, индексите също могат да повлияят негативно на производителността, ако има твърде много от тях. Това е така, защото колкото повече индекси има една таблица, толкова повече работа трябва да свърши MySQL, за да ги поддържа актуализирани. Номерът е да намерите правилния баланс между достатъчно индекси за подобряване на производителността, но не толкова много, че да влияят негативно на производителността. -
За да премахнете индекс от таблица, въведете следната SQL команда. Заменете име_на_таблица с името на таблицата и заменете име_индекс с името на индекса, който искате да изтриете:
ALTER TABLE table_name DROP INDEX index_name;
-
За да видите всички индекси за таблица, въведете следната SQL команда. Заменете име_на_таблица с името на таблицата:
SHOW INDEX FROM table_name \G
След като създадете индекс, трябва да използвате EXPLAIN SELECT изявление отново, за да видите как са засегнати заявките. Освен това трябва да продължите да наблюдавате производителността на базата данни, за да видите дали има подобрения. Може да се наложи да изпълните серия от тестове, за да намерите оптималния брой индекси за вашата база данни.
Повече информация
- За повече информация относно оптимизацията и индексите на MySQL, моля, посетете https://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html.
- За повече информация относно ОБЯСНЯВАНЕТО изявление, моля, посетете https://dev.mysql.com/doc/refman/5.5/en/explain.html.