Одно из основных требований к СУБД - возможность
быстрого поиска требуемых записей среди большого объема информации.
Индексы - это наиболее эффективное средство, позволяющее
значительно ускорить поиск данных в таблицах по сравнению с таблицами,
не содержащими индексов.
Индексы используются СУБД, чтобы привязать данные
ключевых полей к их физическому расположению.
В зависимости от количества используемых полей,
используемых в индексе, различают простые и составные индексы. При определении
составного индекса в Visual FoxPro используется индексное выражение, включающее
индексные поля таблицы.
Значения индексов хранятся в отдельном индексном
файле в упорядоченном виде. Поиск в этом файле осуществляется оптимальным
методом. Для каждого значения индекса существует уникальная ссылка, указывающая
местонахождение в таблице записи, соответствующей индексу. Поэтому при
поиске осуществяется прямой доступ к записи на основе упорядоченных значений
индекса.
Индексы используются для создания первичных ключей
(такой индекс должен быть уникальным).
Для таблиц, содержащих одно индексное поле, оно
должно быть уникальным. В случае составных индексов уникальным должно быть
индексное выражение.
Кроме того, первичные ключи и дополнительные индексы
используются при определении отношений между таблицами и условий целостности
данных.
Чтобы определить индексы нужно в окне конструктора
таблиц выбрать вкладку Indexes.
Для задания индекса нужно определить его имя, способ
упорядочения (возрастание или убывание), тип индекса, индексное выражение
(в случае составного индекса).
Типы индексов
Regular |
хранятся значения индексного выражения для всех записей таблицы; если
несколько записей имеют одинаковое значениеиндекса, то каждое значение
хранится отдельно и содержит ссылку на связанную с ним запись. |
Unique |
хранятся только неповторяющиеся значения индексного выражения; если
две или более записей имеют одинаковое значение индекса, то хранится только
одно значение и ссылка на первую из записей. |
Candidate |
уникальный индекс , не содержащий пустых полей; не является первичным
только потому, что таблица может иметь лишь один первичный ключ. |
Primary |
уникальный индекс, используется для связывания таблиц и определения
условий целостности данных, является первичным ключом, в таблице может
быть только один. |
При задании индексов с одной стороны повышается скорость
выполнения запросов, быстрее сортируются данные, с другой стороны при добавлении
записи тратится время на обновление всех индексов таблицы, при редактировании
индексированного поля обновляются все изменяемые индексы.
Рекомендации по использованию индексов:
-
минимизация количества индексов в таблицах, используемых в транзакциях,
особенно в многопользовательских сетевых приложениях с совмеестным использованием
таблиц;
-
минимизация количества индексов в таблицах, которые регулярно используются
запросами на добавление и удаление;
-
добавление индексов в таблицы с большим числом записей и используемых в
приложениях для принятия решений;
-
индексирование полей внешних ключей таблиц, участвующих в соединении с
первичными ключами других таблиц;
-
индексация полей, для которых установлен критерий.
Если производительность при обработке транзакций имеет
большее значение, чем ускорение приложения для принятия решений, то индексируются
те поля, которые чаще встречаются в критериях запросов на выборку.