Определение ключа для таблицы означает автоматическую сортировку записей, контроль отсутствия повторений значений ключевых полей и повышение скорости выполнения операций поиска в таблице. Для реализации этих функций в СУБД применяют индексирование.
Термин «индекс» тесно связан с понятием «ключ», хотя между ними есть некоторое отличие.
Под индексом понимают средство ускорения операций поиска записей в таблице, а, следовательно, и других операций, использующих поиск: извлечение, модификация, сортировка и т.д. Таблицу, для которой используют индекс, называют индексированной.
Индекс выполняет роль оглавления таблицы, просмотр которого предшествует обращению к записям. Доступ к данным зависит от следующих факторов:
- вида содержимого в ключевом поле индексного файла;
- типа используемых ссылок на запись основной таблицы;
- метода поиска нужных записей.
В поле ключа индексного файла можно хранить значения ключевых полей индексируемой таблицы или свертку ключа (хеш-код). Длина хеш-кода, независимо от длины исходного значения ключевого поля, содержит постоянную достаточно малую величину, что существенно снижает время поисковых операций.
|
|
Для организации ссылки на запись таблицы могут использоваться три типа адресов:
- абсолютный (действительный),
- относительный,
- символический (идентификатор).
На практике чаще всего используются два метода поиска:
- последовательный,
-бинарный (основанный на делении интервала поиска пополам).
Главная причина повышения скорости выполнения различных операций в индексированных таблицах состоит в том, что основная часть работы производится с небольшими индексными файлами, а не с таблицами. Наибольший эффект повышения производительности работы с индексированными таблицами достигается для значительных по объему таблиц. Индексирование требует небольшого дополнительного места на диске и незначительных затрат процессора на изменение индексов в процессе работы. Индексы в общем случае могут изменяться перед выполнением запросов к БД, после выполнения запросов к БД, по специальным командам пользователя или программным вызовам приложений.