Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД_Теория(17 ответ).doc
Скачиваний:
10
Добавлен:
21.09.2019
Размер:
509.95 Кб
Скачать

Вопрос №11

Понятие и виды индексных файлов. Назначение и особенности индексных файлов.

Следует отметить, что такое индексирование проводится только по возрастанию. Отобразим полученный результат с помощью команды LIST

Создание индексных файлов в базах данных преследует цель ускорения поиска записей и для упорядочения записей в таблицах. Вообще в FoxPro существуют 2 типа индексных файлов: *.idx (обычный индексный файл) и *.cdx (составной индексный файл, содержащий несколько индексов).

Следует отметить, что сортировка файла – процесс довольно длительный.

У каждой из этих команд есть свои особенности. Рассмотрим обычный индексный файл *. Idx.

INDEX ON < выражение > TO <имя файла>

Эта команда предназначена для упорядочения информации в базе по значению определенного ключа. Но она не переупорядочивает информацию в самой базе. Вместо этого создается новый индексный файл, записи которого состоят из ключей и указателей. Указатели указывают на позицию соответствующей записи в основной базе. Основное преимущество индексного файла заключается в том, что он используется подобно оглавлению книги. Когда необходимо найти запись с определенным ключом в основной базе, у которой есть индексный файл, используется команда

FIND <строка знаков>/<число>

Она осуществляет поиск строки знаков или числа, указанных в операнде, среди ключей записей в активном индексном файле. Это происходит очень быстро, поскольку индексный файл всегда является упорядоченным. Кроме того, так как записи индексного файла короткие, система располагает их в оперативной памяти. Поэтому операции с индексом часто вообще не требуют обращения к внешним устройствам. Итак, если при поиске использовать индексный файл, понадобится небольшое время для поиска в индексе и всего одно считывание с диска этой записи. Но поиск можно осуществлять только по тем полям базы, для которых созданы индексные файлы. Поэтому, если нужно составлять различные запросы к базе, включающие поиск по разным полям, нужно создавать несколько индексных файлов. Количество индексных файлов к одной базе данных не ограничивается. Однако одновременно открытыми их может быть не более 7 для одной базы. Если необходимо осуществить поиск в базе по двум разным полям, придется завести два индексных файла. Например, для поиска в базе CLIENTS записей по номеру можно создать индексный файл Ponomeru с помощью следующих команд:

USE CLIENTS

INDEX ON Nomer TO Ponomeru

А для поиска записей по имени клиента придется создать индексный файл Poim:

INDEX ON IM TO Poim

Для поиска по этим полям основную базу нужно открыть с одним из индексов. Например:

USE CLIENTS INDEX Ponomeru

или

USE CLIENTS INDEX Poim

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

SET ORDER TO <выражение>

Где <выражение> соответствует номеру открытого индексного файла, по которому будет вестись поиск или выборка. Например:

USE CLIENTS INDEX Ponomeru, Poim

ACCEPT “Введите имя” TO Key

SET ORDER TO 2

FIND Key

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

Если во время изменений в базе CLIENTS файл Ponomeru не был открыт, то привести его в соответствие новому состоянию базы можно командами:

USE CLIENTS

SET INDEX TO Ponomeru

REINDEX

Иногда бывает нужно применить составной ключ. Например в базе CLIENTS есть поле IM и поле FAM. Можно выполнить поиск по фамилии и имени одновременно, если индексирование выполнить командой:

INDEX ON FAM+IM TO Famim

Далее для поиска записи можно использовать составной ключ:

USE CLIENTS

INDEX ON FAM+IM TO Famim

ACCEPT “Введите фамилию” TO FAM

ACCEPT “Введите имя” TO IM

STORE FAM+IM TO Key

FIND & Key