Можно прийти к ложному выводу, что чем больше индексов - тем лучше, но это не так: добавление индекса далеко не всегда приводит к увеличению производительности. Например, маленьким таблицам индексирование не нужно. К тому же каждый индекс занимает место на диске - каждое индексированное поле заставляет MySQL хранить информацию о каждой записи в этом поле и ее расположении в базе данных. При создании индексов эти таблицы начинают занимать больше места. Далее, индексирование ускоряет поиск, но заметно замедляет такие операции записи, как INSERT, DELETE или UPDATE. Вполне возможно, что первые попытки индексирования не дадут большого прироста производительности.
Контролировать и определять кандидатов на индексирование помогут счетчики. Команды SHOW STATUS и расширенные команды состояния mysqladmin выдают значения, имеющие отношение к индексам.
■ При работающих индексах значение счетчика Handler_read_key должно быть большим. Это значение отображает количество чтений строк с помощью индекса. Небольшое значение указывает на небольшое увеличение производительности после добавления индекса, так как он не используется часто.
■ Большое значение счетчика Handler_read_rnd_next свидетельствует о том, что ваши запросы выполняются неэффективно, а решением проблемы может быть индексирование. Это значение указывает количество последовательных запросов чтения следующей строки в последовательности. Это происходит когда для вы­полнения запроса таблица последовательно сканируется с начала до конца от первой записи до последней. При частых запросах это довольно неразумное использование ресурсов. Ассоциированный индекс прямо указывает на запись (или записи), и полное сканирование таблицы при этом не нужно. Заметьте, что плохо работающие индексы тоже могут привести к увеличению этого значения.
Чтобы просмотреть эти счетчики, запустите команду.
Оптимизация производительности
После заполнения таблиц данными и их индексирования их должным образом, необ­ходимо запустить команду ANALYZE TABLE. Эта команда анализирует данные в таблице и создает статистику по среднему количеству строк, которые используют одинаковые значения. Эта информация используется оптимизатором MySQL при принятии решения, какой индекс использовать для объединения таблиц.
Оптимизация производительности
Для уверенности в том, что оптимизатор использует самый эффективный индекс, неплохо часто запускать команду ANALYZE TABLE, особенно после добавления в таблицу большого объема данных.
Естественный порядок
Если у вас есть таблица, которая часто читается, но изменяется редко, попробуйте вместо индексирования отсортировать ее. Для этого используются команды OBDER BY и ALTER TABLE. Чтение будет производиться быстрее и эффективнее.