Visual FoxPro предлагает различные типы индексов для того, чтобы вы могли выполнять дополнительные задачи с данными:

Вы можете использовать все типы индексов, предлагаемые Visual FoxPro, за исключением бинарных индексов для выполнения запросов, представлений, упорядочивания и операции SEEK на записях. Вы можете использовать все типы индексов для оптимизации условий фильтрации и условий ON и WHERE в предложениях SQL SELECT.

В приведенной ниже таблицы суммированы сведения о типах индексов доступных в Visual FoxPro.

Типы индексов Visual FoxPro
Тип индекса Описание Сколько можно иметь

Primary

Не позволяет иметь дублированные значения в указанных полях или выражениях.

Один на таблицу

Candidate

Не позволяет иметь дублированные значения в указанных полях или выражениях.

Более одного на таблицу

Regular

Позволяет иметь дублированные значения в указанных полях или выражениях.

Более одного на таблицу

Binary

Индексирует записи на действительных или недействительных логических выражениях.

Более одного на таблицу

Unique

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

Более одного на таблицу

Первичные индексы (primary indexes)

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

NoteЗамечание

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

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

Индексы-кадидаты (candidate index)

Аналогично первичному индексу, индекс-кандидат может содержать индексный ключ для любой записи в таблице и предохранять от появления дублирующих значений в поле или в индексном выражении, определенном для генерации индексного ключа. Однако, в противоположность первичному индексы вы можете создать множество таких индексов на одну таблицу. Название "кандидат" в действительности отражает статус индекса; то есть, вы можете создать индекс кандидат, как альтернативу первичному индексу.

NoteЗамечание

Если вы укажете индекс-кандидат на любом поле, которое содержит дублированные значения, Visual FoxPro сгенерирует ошибку.

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

Нормальные индексы (Regular Indexes)

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

Вы не можете использовать нормальные индексы для навязывания уникальности данных в этих записях. Вы можете использовать нормальный индекс для определения стороны "-многим" (выражения "один-ко-многим")  в этих постоянных отношениях.

Бинарные индексы (Binary Indexes)

Винарные индексы, или индексы битовых карт, используются для создания индексов, основанных на логических выражениях, например, для индексирования удаленных записей, и поддерживаются как для свободных таблиц, так и для таблиц членов контейнера базы данных. Однако, бинарные индексы не поддерживают перечисленного ниже:

  • Использования индексного выражения оцениваемого в null.

  • Использования опции FOR для выражений фильтра.

  • Измения порядка, в котором записи отображаются и обрабатываются, например, использования ключевых слов ASCENDING, DESCENDING, UNIQUE или CANDIDATE.

  • Установки бинарных индексов как управляющих индексов, например, для использования в команде SET ORDER.

  • Осуществления операций поиска и упорядочивания.

Бинарные индексы могут быть существенно меньше по размеру, чем не-бинарные и могут значительно повысить скорость в обслуживании индексов, например, при использовании индексов, основанных на записях, помеченных для удаления. Для получения более подробной информации смотрите Индексы, основанные на записях помеченных для удаления. Visual FoxPro часто может создать битовую карту оптимизации Rushmore для бинарных индексов значитетельно быстрее, если число возвращаемых записей более, чем 3% от общего числа записей. Однако, если возвращаемое число записей менеее 3% от общего числа записей, то создание битовых карт оптимизации Rushmore является более медленным процессом. 3% барьер может уменьшаться по мере увеличения записей в таблице.

NoteЗамечание

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

Вы можете создавать бинарные индексы с помощью дизайнера таблиц или с помощью команды INDEX. Для получения более подробной информации смотрите Как: создавать индексы и Команды INDEX.

Уникальные индексы (Unique Indexes)

Ранние версии Visual FoxPro включали уникальные индексы. Уникальные индексы в действительности не предохраняют вас от появления дублированных записей значений, которые введены в таблицу. Название "unique" в действительности описывает входа в индексном файле, так как файл не хранит более одного исключительного индексного ключа и сбрасывает последующие появления дублированных индексных ключей. Уникальные индексы делают возможным указать, что только индексный ключ первой записи, отвечающий индексному выражению добавляется в индекс. После того, как соответствие имело место, то другие индексные ключи не добавляются в индекс. Однако таблица продолжвет содержать дублированные записи.

NoteСовет

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

Смотрите также