Индексы
По определениям ключей (первичных или вторичных, см. п. 2.2) СУБД автоматически строит индексы, которые представляют собой механизмы быстрого доступа к хранящимся в таблицах данным.
Сущность индексов состоит в том, что они хранят отсортированные значения индексных полей (т.е. полей, по которым построен индекс) и указатель на запись в таблице. Например, пусть имеется таблица, показанная на рис. 2.11.
Порядковый
№ записи | Дата прихода
товара | Наименование
товара | Количество,
кг |
| |||
1 | 10.12.1999 | Сахар | 10 | ||||
2 | 12.12.1999 | Картофель | 50 | ||||
3 | 12.12.1999 | Свекла | 20 | ||||
4 | 14.12.1999 | Сахар | 50 | ||||
5 | 14.12.1999 | Свекла | 10 | ||||
6 | 16.12.1999 | Сливы | 4 |
Рис. 2.11 Физическая структура таблицы
С логической точки зрения ее индексы выглядит так, как показано на рис. 2.12.
Индекс по дате прихода товара | Индекс по наименованию товара | Индекс по количеству | |||||||||
Дата прихода | № записи | Наименование товара | № записи | Количество | № записи | ||||||
10.12.99 | 1 | Картофель | 2 | 4 | 6 | ||||||
12.12.99 | 2 | Сахар | 1 | 10 | 1 | ||||||
12.12.99 | 3 | Сахар | 4 | 10 | 5 | ||||||
14.12.99 | 4 | Свекла | 3 | 20 | 3 | ||||||
14.12.99 | 5 | Свекла | 5 | 50 | 2 | ||||||
16.12.99 | 6 | Сливы | 6 | 50 | 4 |
Рис. 2.12. Логическая структура индексов
Обратите внимание: значения полей в индексе («Дата прихода», «Наименование товара», «Количество») сортируются по возрастанию, что существенно ускоряет поиск нужных значений. Если, например, нужно выбрать все записи с наименованием товара «Свекла», нет нужды просматривать всю таблицу. Достаточно найти в индексе, построенном по столбцу «Наименование товара», первый указатель на запись, содержащую товар «Свекла», и считать из таблицы эту запись, а затем повторить то же для всех иных указателей в индексе на записи с товаром «Свекла». Поскольку значения полей отсортированы, поиск первого указателя осуществляется специальными методами быстрого поиска и реализуется значительно быстрее, чем если бы поиск шел по неотсортированным полям таблицы. Такой метод доступа к записям таблицы называется индексно-последовательным, потому что:
· поиск ведется по индексу, а не по таблице;
· доступ начинается с первой строки, удовлетворяющей условию запроса или его части;
· строки в индексе, начиная с первой найденной записи, просматриваются последовательно.
В том случае, если в условия запроса входят поля, по которым не построено индексов, ищется иной пригодный индекс, а если такого индекса нет, производится последовательный перебор записей таблицы БД (в некоторых СУБД, например, использующих технологию ADO, в этом случае может быть построен вспомогательный индекс).