6.5.7 Как добавить B-TREE индекс в БД

Database Optimize Banner

Давайте рассмотрим практический пример оптимизации таблицы с миллионами строк с помощью простейшего индекса.

Дополнительно: у нас имеется детальная инструкция по использованию индексов для оптимизации БД. Ознакомиться с ней Вы можете по адресу.

Анализ

Для анализа нам необходимо будет phpMyAdmin и ознакомиться с нашей базой данных.

У нас имеется база данных testdata с единственной одноименной таблицей. Теперь стоит просмотреть структуру самой таблицы:

phpMyAdmin, структура БД

Как видим, у нас имеется ~3533441 строки. Полный перебор такой таблицы займет непростительно много времени по меркам работы с БД.

Давайте проверим наличие индексов. Сделать это можно во вкладке Структура:

phpMyAdmin, структура таблицы

Индексация отсутствует (Primary Key это технический индекс по колонке id). Давайте попробуем выполнить запрос и посмотреть, сколько времени займет полный перебор:

phpMyAdmin, выполнение запроса ДО

1.5 cекунды это непростительно долго для подобного запроса. Попробуем сократить это время.

Добавление индекса

Итак, какой именно тип индекса нам стоить добавить и каким образом?

Исходя из статьи, наш выбор падет на простейший BTREE.

Давайте добавим его в таблицу следующим запросом:

ALTER TABLE testdata ADD INDEX hash(hash) USING BTREE;

Учтите: создание индекса может занять ощутимое количество времени. Это зависит от самой таблицы и сложности индекса.

Тестирование

Время проверить скорость выполнения аналогичного запроса после добавления индекса:

phpMyAdmin, выполнение запроса ПОСЛЕ

Как видим, запрос был выполнен за 0.0005 секунд. Это более чем тысячекратное ускорение.

Конечно, эта тестовая таблица была синтетически создана именно для воспроизведения подобного результата. В реальных условиях тысячекратное ускорение запросов может быть достигнуто далеко не всегда.