Другой способ представить данные не так, как они хранятся, - это использовать индексы. Индексы используются для следующих целей:
· поддержания фразы UNIQUE,
· поддержания логической упорядоченности данных согласно значений одного или нескольких полей,
· оптимизации выполнения запросов.
С точки зрения пользователя индекс – это перечень полей таблицы, по которым записи этой таблицы логически упорядочиваются. С точки зрения СУБД индекс – это механизм позволяющий существенно увеличить скорость доступа к записям по индексируемым полям, а также обеспечивающий эффективную проверку уникальности значений индексируемых полей.
Определение индекса. Базовый синтаксис предложения по созданию индекса следующий:
CREATE INDEX index_name
ON table_name (column_name1 [, column_name3]…])
Однако в конкретных СУБД он существенно дополняется другими конструкциями.
Правила использования индексов. При использовании индексов следует руководствоваться следующими правилами:
· Для таблиц небольших размеров индексы практически не приводят к повышению производительности.
· Индексы существенно повышают производительность, когда столбцы содержат в основном неповторяющиеся данные или много NULL значений.
· Индексы существенно оптимизируют выполнение запросов, которые выдают небольшое количество строк (хорошее правило – 25% строк).
· Индексы повышают скорость поиска данных, однако замедляют процесс их обновления. Помните об этом, когда необходимо произвести одновременно обновление большого количества строк с индексами. В этом случае можно рассмотреть вариант, когда перед таким обновлением индекс уничтожается, а по завершению обновлений он опять восстанавливается.
· Помните, что индексы занимают определенное место в базе данных. Если СУБД позволяет управлять памятью, отводимой для базы данных, отведите часть памяти под индексы.
· Всегда индексируйте поля, которые используются для соединения таблиц. Это существенно увеличивает скорость соединения таблиц.
· Не индексируйте поля, которые регулярно подвергаются интенсивному обновлению.
· Если это возможно, то не храните индексы и таблицы на одном и том же физическом устройстве. Разделение этих объектов снижает нагрузку на носители и приводит к более быстрому выполнению запросов.
Составной индекс. SQL позволяет индексировать по нескольким полям в одном индексе. Например,
CREATE INDEX DEPT_HEAD_NAME ON DEPARTMENT (Head, Name)
создает индекс в таблице DEPARTMENT по полям Head и Name. В составных индексах старайтесь сначала указывать наиболее часто используемые поля. Используйте составные индексы, если указанные в них поля часто используются одновременно для указания условия выборки данных.
Использование фразы UNIQUE. Некоторые СУБД позволяют использовать в определении индекса фразу UNIQUE для указания, что значения индекса должны быть уникальными. Например,
CREATE UNIQUE INDEX GROUP_ID ON GROUP (#G)
свидетельствует, что в таблице GROUP значения поле #G должны быть неповторяющимся (уникальными).
Порядок сортировки полей в индексе. В некоторых СУБД допускается указывать порядок сортировки индексируемых полей. Например,
CREATE INDEX FACULTY_NAME_DEAN ON FACULTY (Name DESC, Dean)
указывает на необходимость индексирования таблицы FACULTY по столбцу Name в убывающем порядке, а столбцу Dean - в возрастающем. По умолчанию всегда порядок сортировки в индексе предполагается возрастающим.
Удаление индекса. Удаление индекса производится по команде DROP INDEX с синтаксисом: