Шаг 15.
Работа с локальными БД в Delphi.
Индексы и методы доступа

    На этом шаге мы рассмотрим использование индексов.

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

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

Таблица 1. База данных, индексированная по полю Год записи
Год записи Название ансамбля Название CD Песня
1998 Nautilus Наугад Тихие игры, Падал теплый снег, Черные птицы…
1998 Петлюра Судьба Мчится карета, Судьба, Солдатка, Цвела акация...
1999 Петлюра Север Север, В городском саду, Родители, весна, Солдат…
2003 5`NIZZA 5`NIZZA Пятница, Тянуться, Ямайка, Солдат…
2003 Фактор 2 Девочка Мальвина Одинокая звезда, Окна, Привидение, Hey, Baby, Hey...

    Как видно из примера, при индексации по полю Год записи удобно просматривать диске в соответствии с датой их выпуска, т.е. фактически индекс можно представить как список полей (рисунок 1).


Рис.1. Представление индекса

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

    Итак мы познакомились с двумя методами доступа к записям в таблице - последовательным и индексно-последовательным. При этом индексно-последовательный доступ неявно использует последовательный доступ.

    При последовательном методе доступа для выполнения запроса к таблице БД просматриваются все записи таблицы, от первой к последней. Нет смысла говорить, что этот метод совершенно неэффективен (зачем просматривать 100 000 записей, если удовлетворяют условию запроса всего 2?). Неэффективность выражается, прежде всего, в потере быстродействия и напрасной трате вычислительных ресурсов. Время выполнения запроса прямо пропорционально числу записей в таблице.

    При индексно-последовательном методе доступа для выполнения запроса к таблице БД указатель в индексе устанавливается на первую строку, удовлетворяющую условию запроса (или его части), и считывается запись из таблицы по хранящемуся на нее в индексе указателю. Затем указатель в индексе перемещается на следующую строку, удовлетворяющую условию запроса (или его части), и из таблицы считывается запись. То же происходит для всех строк в индексе, удовлетворяющих условию запроса (или его части). Процесс выборки прекращается, когда текущая строка в индексе перестанет удовлетворять условию запроса.

    Для "локальных" ("персональных") СУБД типа Paradox, dBase индексы хранятся отдельно от основной таблицы базы данных - в виде отдельного файла. В случае их определения в "промышленных" ("серверных") СУБД - таких как Oracle, Sybase, InterBase, SQL Server - индексы хранятся вместе с БД.

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




Предыдущий шаг Содержание Следующий шаг