Индекс представляет собой еще одну физическую структуру базы данных
Индекс представляет собой еще одну физическую структуру базы данных, которая также занимает пространство на диске, как и таблица, однако СУБД используется за кулисами для повышения производительности запросов. Пользователи, имеющие достаточные привилегии, могут создавать и удалять индексы, в то же время обычные выражения и инструкции SQL никогда к ним явно не обращаются. Для примера предположим, что созданная ранее таблица PHONE бала наполнена записями, и выполняется следующий запрос. В первую очередь СУБД проверяет, существует ли индекс по столбцу условия (PHONE_CUS — TID_FN). Если это так, для определения физического местоположения нужных строк используется индекс (будут найдены строки, где PHONE_CUSTID_FN=152). Если же такого индекса не существует, в поиске строк с соответствующими значениями выполняется сканирование всей таблицы. Индекс базы данных в чем-то сходен с предметным указателем в конце книги. В индексе хранятся указатели на физическое местоположение строк на диске, так же, как в предметном указателе — номера страниц, где упоминаются соответствующие термины. С другой стороны, индекс можно сравнить с таблицей базы данных, содержащей несколько столбцов: один для физического адреса, а остальные для индексируемых столбцов таблицы. Другими словами, индекс сообщает СУБД, где искать на диске конкретную строку (или группу строк) таблицы (рис. 4.4). Однако учтите, что в настоящем разделе приведена только аналогия, это не описание работы индекса. При некотором упрощении реального положения вещей можно сказать, что столбец таблицы и индекс имеют один и тот же набор значений. Основное отличие состоит в том, что в индексе эти значения упорядочены, поэтому поиск в нем нужной величины занимает значительно меньше времени.