Индексы


    Одно из основных требований к СУБД - возможность быстрого поиска требуемых записей среди большого объема информации.
    Индексы - это наиболее эффективное средство, позволяющее значительно ускорить поиск данных в таблицах по сравнению с таблицами, не содержащими индексов.
    Индексы используются СУБД, чтобы привязать данные ключевых полей к их физическому расположению.
    В зависимости от количества используемых полей, используемых в индексе, различают простые и составные индексы. При определении составного индекса в Visual FoxPro используется индексное выражение, включающее индексные поля таблицы.
    Значения индексов хранятся в отдельном индексном файле в упорядоченном виде. Поиск в этом файле осуществляется оптимальным методом. Для каждого значения индекса существует уникальная ссылка, указывающая местонахождение в таблице записи, соответствующей индексу. Поэтому при поиске осуществяется прямой доступ к записи на основе упорядоченных значений индекса.

    Индексы используются для создания первичных ключей (такой индекс должен быть уникальным).
    Для таблиц, содержащих одно индексное поле, оно должно быть уникальным. В случае составных индексов уникальным должно быть индексное выражение.
    Кроме того, первичные ключи и дополнительные индексы используются при определении отношений между таблицами и условий целостности данных.

    Чтобы определить индексы нужно в окне конструктора таблиц выбрать вкладку Indexes.
    Для задания индекса нужно определить его имя, способ упорядочения (возрастание или убывание), тип индекса, индексное выражение (в случае составного индекса).

    Типы индексов
 
Regular хранятся значения индексного выражения для всех записей таблицы; если несколько записей имеют одинаковое значениеиндекса, то каждое значение хранится отдельно и содержит ссылку на связанную с ним запись.
Unique хранятся только неповторяющиеся значения индексного выражения; если две или более записей имеют одинаковое значение индекса, то хранится только одно значение и ссылка на первую из записей. 
Candidate уникальный индекс , не содержащий пустых полей; не является первичным только потому, что таблица может иметь лишь один первичный ключ.
Primary уникальный индекс, используется для связывания таблиц и определения условий целостности данных, является первичным ключом, в таблице может быть только один.
    При задании индексов с одной стороны повышается скорость выполнения запросов, быстрее сортируются данные, с другой стороны при добавлении записи тратится время на обновление всех индексов таблицы, при редактировании индексированного поля обновляются все изменяемые индексы.
 
    Рекомендации по использованию индексов:

  • минимизация количества индексов в таблицах, используемых в транзакциях, особенно в многопользовательских сетевых приложениях с совмеестным использованием таблиц;
  • минимизация количества индексов в таблицах, которые регулярно используются запросами на добавление и удаление;
  • добавление индексов в таблицы с большим числом записей и используемых в приложениях для принятия решений;
  • индексирование полей внешних ключей таблиц, участвующих в соединении с первичными ключами других таблиц;
  • индексация полей, для которых установлен критерий.
    Если производительность при обработке транзакций имеет большее значение, чем ускорение приложения для принятия решений, то индексируются те поля, которые чаще встречаются в критериях запросов на выборку.