Использование индексов
Индексы повышают производительность запросов, выбирающих относительно небольшое число строк из таблицы.
Для определения целесообразности создания индекса нужно проанализировать запросы к таблице и распределение данных в индексируемых столбцах.
Система может воспользоваться индексом по определенному атрибуту, если в запросе на значение этого атрибута накладывается условие:
SELECT * FROM emp WHERE name = ’Петр’;
Использование индексов
Но даже при наличии такой возможности система не всегда обращается к индексу.
Если запрос выбирает больше половины записей таблицы, то извлечение данных через индекс потребует больше времени, чем последовательное чтение данных.
Это происходит потому, что данные через индекс выби-
раются не в той последовательности, в которой они хранятся в памяти.
Для подобных запросов построение индекса
нецелесообразно.
Обращение к составному индексу (1)
Происходит, только если в условиях выбора участвуют столбцы, представляющие собой лидирующую часть составного индекса.
Если индекс включает поля (X, У, Z), то обращение к нему будет происходить, когда в условии запроса участвуют поля XYZ, XY или X (и именно в таком порядке).
При создании индекса большое значение имеет селективность. Она определяется процентом строк, имеющих одинаковое значение индексируемого столбца: чем выше этот процент, тем меньше селективность.
Обращение к составному индексу (2)
В некоторых случаях использование составного индекса предпочтительнее, чем одиночного, а именно:
Несколько столбцов с низкой селективностью в комбинации друг с другом могут дать гораздо более высокую селективность.
Если в запросах часто используются только столбцы, участвующие в индексе, система может вообще не обращаться к таблице для поиска данных.
Выбор столбцов для индекса (1)
В первую очередь выбираются столбцы, наиболее часто встречающиеся в условиях поиска.
Индексируют столбцы, являющиеся внешними ключами. В этом случае наличие индекса позволяет обновлять строки подчиненной таблицы без блокировки основной таблицы (при конкурентном обновлении).
Нецелесообразно индексировать столбцы с низкой селективностью. Исключения для низкой селективности составляют случаи, при которых выборка чаще производится по редко встречающимся значениям.