Индекс - это объект базы данных, в котором содержится информация об организации данных в таблицах БД. Преимущество применения индексов заключается в том, что они значительно сокращают количество операций ввода/вывода, проводимых при осуществлении доступа к какой-либо части набора данных. Получив команду на создание индекса, СУБД сканирует таблицу и строит список уникальных значений, которые позже будут использоваться при сортировке и поиске данных.
Чем больше объем индексируемых данных и чем больше полей входит в индекс, тем больше ресурсов компьютера затребует процесс индексирования таблицы. Однако если таблица не является статичным объектом и хранящиеся в ней данные постоянно изменяются, то СУБД с каждой операцией вставки или редактирования данных будет вынуждена обновлять индексы, т. е. повторно сканировать таблицу. Поэтому разработчик БД должен уметь балансировать на грани разрешения противоречия между увеличением скорости доступа к фрагменту данных и повышением скорости обновления данных в таблице. В первом случае целесообразно проиндексировать таблицу, во втором - вообще отказаться от индексов.
Разработчики БД постоянно занимаются разрешением этого противоречия. Существует ряд рекомендаций по вопросу определения индексов.
Целесообразно индексировать:
• Столбцы первичного ключа. Как правило, большинство СУБД индексируют их автоматически.
• Столбцы, являющиеся внешними ключами. Индексирование этих полей значительно повышает скорость поиска информации.
• Столбцы, входящие в директивы сортировки (ORDER BY) и группировки данных (GROUP BY). Причем последовательность определения полей в индексе должна соответствовать последовательности полей в директиве.
• Если большую часть времени таблица не редактируется, а используется только для выборки данных (например, телефонный справочник города), индексируйте ее «вдоль и поперек». В случае пополнения такой таблицы большой порцией данных целесообразно удалить старые индексы и создать их вновь после внесения новых записей.
Не стоит индексировать:
• Столбцы типа BLOB и столбцы, построенные на основе данных этого типа.
• Символьные поля большого размера.
• Поля, допускающие данные NULL.
• Часто изменяемые столбцы, т. к. это замедлит выполнение операций модификации данных.
• Столбцы, которые содержат много повторяющихся значений.