Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции / Л-9 - Методы доступа к данным

.pdf
Скачиваний:
12
Добавлен:
28.06.2021
Размер:
606.3 Кб
Скачать

Использование индексов

Индексы повышают производительность запросов, выбирающих относительно небольшое число строк из таблицы.

Для определения целесообразности создания индекса нужно проанализировать запросы к таблице и распределение данных в индексируемых столбцах.

Система может воспользоваться индексом по определенному атрибуту, если в запросе на значение этого атрибута накладывается условие:

SELECT * FROM emp WHERE name = ’Петр’;

Использование индексов

Но даже при наличии такой возможности система не всегда обращается к индексу.

Если запрос выбирает больше половины записей таблицы, то извлечение данных через индекс потребует больше времени, чем последовательное чтение данных.

Это происходит потому, что данные через индекс выби-

раются не в той последовательности, в которой они хранятся в памяти.

Для подобных запросов построение индекса

нецелесообразно.

Обращение к составному индексу (1)

Происходит, только если в условиях выбора участвуют столбцы, представляющие собой лидирующую часть составного индекса.

Если индекс включает поля (X, У, Z), то обращение к нему будет происходить, когда в условии запроса участвуют поля XYZ, XY или X (и именно в таком порядке).

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

Обращение к составному индексу (2)

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

Несколько столбцов с низкой селективностью в комбинации друг с другом могут дать гораздо более высокую селективность.

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

Выбор столбцов для индекса (1)

В первую очередь выбираются столбцы, наиболее часто встречающиеся в условиях поиска.

Индексируют столбцы, являющиеся внешними ключами. В этом случае наличие индекса позволяет обновлять строки подчиненной таблицы без блокировки основной таблицы (при конкурентном обновлении).

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

Выбор столбцов для индекса (2)

Не индексируются часто обновляемые столбцы, так как команды обновления ведут к потере времени на обновление индекса.

Не индексируются столбцы, часто используемые как

аргументы выражений или функций – как правило,

это не позволяет использовать индекс.

Хеширование

Ассоциативный доступ к хранимым записям предполагает определение местоположения записи по значениям содержащихся в ней данных.

В этом случае используются более сложные механизмы размещения.

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

Хеширование

Хеширование – специально подобранная хеш-функ-

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

Под ключом записи здесь подразумевается поле (набор полей), позволяющее классифицировать запись.

Например, для таблицы СОТРУДНИКИ роль ключа записи может играть поле Номер паспорта или набор полей (Фамилия, Имя, Дата рождения).

Хеш-функция

Для определения адреса записи в области хранения к значению ключевого поля этой записи применяется так называемая хеш-функция h(K).

Она преобразует значение ключа К в адрес участка памяти (свертка ключа).

Новая запись будет размещаться по тому адресу, который выдаст хеш-функция для ключа этой записи.

При поиске записи по значению ключа К хеш-функция выдаст адрес, указывающий на начало участка памяти, в котором надо искать эту запись.

Основные свойства хеш-функции (1)

Выдавать такие значения адресов, чтобы обеспечить

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

Для разных значений ключа выдавать разные адреса.