Индексы в базе данных — «турбируем» поиск!

Опубликовано Опубликовано в рубрике SQL

Продолжая недавнюю статью об оптимизации случайных выборок из баз данных, хотелось бы продолжить тему ускорения работы «прожорливых» до ресурсов сайтов. Сегодня речь пойдет о выборках информации из больших таблиц.

Сразу же хочу оговориться — оптимизацию самих запросов никто не отменял! =) Так что индексы могут не спасти от внесения в логику кривого запроса. Но в больших таблицах даже хороший запрос может не радовать скоростью своего выполнения.

Особенно падают скорости с добавлением поиска по нескольким таблицам. В этом случае нам и поможет встроенная индексация таблиц.

Стоит обратиться к теории для полного понимания вопроса. Что же такое индекс в базе данных? Википедия на пару с Гуглом говорят, что это «объект базы данных, создаваемый с целью повышения производительности поиска данных». По умолчанию, запрос выполняется «строка за строкой». То есть, если необходимо вывести одну строчку из конца таблицы в 100 тысяч строк, процесс должен будет обойти практически всю сотню тысяч. Это плохо и долго. Индекс же формируется под поиск в виде дерева. Таким образом, скорость поиска вырастает не в разы, но на порядки! К примеру (на основе реального бенчмарка), запрос, выполнявшийся 6 секунд, после добавления индекса выполняется около 0.15 секунд. Разница заметна!

Но везде есть свои плюсы и свои минусы.

При работе с индексами нужно помнить следующие вещи:

1. Индексы хороши для преимущественно статичных БД. В динамических базах добавление индекса влечет за собой увеличение времени записи в базу. Потому что индекс — это такая же таблица, а значит он также должен обновляться!

2. Из того, что индекс — таблица, следует следующий пунктик. Индекс занимает место на диске. И размер этого места прямо пропорционален размеру таблицы, по которой делается индекс.

3. Индекс — это очень хорошо, но к его созданию нужно подходить с умом. Если в Вашей системе есть часто повторяющиеся запросы к большим таблицам, требующие на выдачу одни и те же столбцы, то стоит создать комбинированный индекс. То есть, индекс по нескольким столбцам. К примеру, если у вас есть таблица, в которой хранятся имена, возраста и спецификации пользователей, а система часто запрашивает возраст вместе с именем, то индексировать их нужно в паре!

Теперь перейдем к практике. Добавим индекс к какой-либо таблице. Проще всего это сделать через PhpMyAdmin:

Заходим в меню «Структура», справа напротив нужного для индексации столбца выбираем поле «Еще», а в выпадающем списке — пункт «Добавить индекс».

Если же нужно добавить индекс при помощи команд в mysql, то запись будет выглядеть следующим образом:

CREATE INDEX index_name
ON table_name (column_name)

Командой

CREATE UNIQUE INDEX index_name
ON table_name (column_name)

можно создать индекс, состоящий только из уникальных значений.

Для создания вышеупомянутого комбинированного индекса необходимо подать следующую команду

CREATE INDEX PIndex
ON Persons (LastName, FirstName)

Надеюсь, что эта небольшая заметка поможет Вам!

За сим все!

Безошибочного Вам кода!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *