Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Неделя 10 Лекция 1 (15).doc
Скачиваний:
1
Добавлен:
13.11.2019
Размер:
78.34 Кб
Скачать

НЕДЕЛЯ

10

ЛЕКЦИЯ

1 (15)

ТЕМА

Индексы.

Содержание

15.1. Индексирование таблиц базы данных. 1

15.2. Логическое разделение на ключи и индексы. 1

15.3. Необходимость создания индексов. 2

15.4. Оператор CREATE INDEX и DROP INDEX. 3

15.5. Улучшение производительности работы индекса. 4

15.1. Индексирование таблиц базы данных.

Индекс представляет собой структуру, позволяющую выполнять ускоренный доступ к строкам таблицы на основе значений одного или более ее столбцов. Наличие индекса может существенно повысить скорость выполнения некоторых запросов. Однако, поскольку индексы должны обновляться системой при каждом внесении изменений в их базовую таблицу, они создают дополнительную нагрузку на систему. Индексы обычно создаются с целью удовлетворения определенных критериев поиска, после того как таблица уже находилась некоторое время в работе и увеличилась в размерах.

Индекс – это структура данных, которая помогает СУБД быстрее обнаруживать отдельные записи в файле, а потому позволяет сократить время выполнения запросов пользователей.

Индекс в базе данных аналогичен предметному указателю, приведенному в конце книги. Это структура, связанная с файлом и предназначенная для поиска информации по тому же принципу, что и предметный указатель в книге. Индекс позволяет избежать проведения последовательного или пошагового сканирования файла в поисках нужных данных. При использовании индексов в базе данных искомым объектом может быть одна или несколько записей файла. Как и предметный указатель данной книги, индекс базы данных упорядочен, и каждый элемент индекса содержит название искомого объекта, а также один или несколько указателей (идентификаторов записей) на место его расположения.

15.2. Логическое разделение на ключи и индексы.

В InterBase разделено понятие ключей и индексов. Это разделение, впрочем, имеет логическую окраску, то есть ценно при создании таблицы базы данных. Первичный (PRIMARY KEY) и внешний (FOREIGN KEY) ключи строятся для обеспечения ссылочной целостности реляционно-связанных таблиц в базе данных. Первичный ключ, помимо этого, выполняет функции поддержания уникальности своих значений, что обусловлено его основным назначением – однозначно характеризовать запись в таблице базы данных. Для таких же целей может использоваться и просто уникальный ключ (UNIQUE).

"Обычные" индексы, создаваемые оператором CREATE INDEX, в отличие от ключей, служат для обеспечения сортировок и оптимизации доступа к данным.

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

15.3. Необходимость создания индексов.

Индексы необходимо создавать в случае, когда по столбцу или группе столбцов:

  • часто производится поиск в базе данных (столбец или группа столбцов часто перечисляются в предложении WHERE оператора SELECT);

  • часто строятся объединения таблиц;

  • часто производится сортировка в наборе данных, возвращаемых в качестве результатов запросов к базе данных (то есть столбец или столбцы часто используются в предложении ORDER BY оператора SELECT).

Не рекомендуется строить индексы по столбцам или группам столбцов, которые:

  • редко используются для поиска, объединения и сортировки результатов запросов;

  • часто меняют значение, что приводит к необходимости часто обновлять индекс и способно существенно замедлить скорость работы с базой данных;

  • содержат небольшое число вариантов значения.

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

  • при использовании в некоторых запросах не всех столбцов из этого индекса следует использовать только непрерывную последовательность столбцов; например, если индекс построен по столбцам Р1, Р2, РЗ, Р4, то в некотором операторе SELECT допустимо указать SELECT … ORDER BY P1, P2, P3 но никак не SELECT ... ORDER BY P1, P2, P4 или SELECT ... ORDER BY P1, P3, P4, поскольку в последних двух случаях индекс, построенный по столбцам Р1, Р2, РЗ, Р4, не будет использован;

  • последовательность указания в предложении ORDER BY столбцов является важной; так, для индекса, построенного по столбцам Р1, Р2, РЗ, Р4, указание SELECT ... ORDER BY P2, P1, P3 не приведет к использованию указанного индекса для сортировки результирующего набора данных;

  • при частом использовании в условной части WHERE оператора SELECT нескольких столбцов, связанных между собой операцией "или" (OR): SELECT ... WHERE P1 = значение1 OR P2 = значение2 OR РЗ = ... вместо индекса по столбцам PI, P2, РЗ лучше создать несколько индексов, построенных по каждому из этих полей, поскольку в противном случае будет осуществлен последовательный просмотр всей таблицы; это неудивительно, поскольку индексно-последовательный доступ для индекса по столбцам Р1, Р2, РЗ может быть осуществлен только для столбца Р1; значения столбцов Р2 и РЗ в этом индексе спонтанно разбросаны по индексу.