Распечатать страницу

Использование индексов для оптимизации вычислений VFP

« Назад

Рассмотрим программу, выводящую фамилии авторов, коды которых находятся в диапазоне от 500 до 700 включительно.

close databases

open database 'd:\HomeLibrary\HomeLibrary'

use Authors order tag AuthorId

select Authors

scan for Between(AuthorId, 500, 700)

? Author                             && Печатаем поле Author таблицы Authors

endscan

Первый параметр функции BETWEEN( ) опции FOR является индексным выражением индекса AuthorId. Это позволяет, во первых, применить бинарный поиск с аргументом поиска 500 для позиционирование на записи с AuthorId = 500, а во вторых, перемещаться на следующую запись таблицы Authors, используя индекс AuthorId.

Таким образом, выражение BETWEEN(AuthorId, 500, 700) рассмотренной опции FOR является оптимизируемым.

При отсутствии такого индекса, чтобы переместиться, например, с записи с AuthorId = 500 на запись с AuthorId = 501, пришлось бы выполнить ее последовательный поиск.

Встроенная в VFP рашмор-оптимизация, употребляемая для ускорения вычислений в командах с опцией FOR, а также при выполнении команд SELECT – SQL, DELETE - SQL и UPDATE – SQL, использует приведенные выше идеи бинарного поиска. Они осуществимы, если имеются соответствующие индексы и FOR-выражение или имеющиеся в SQL-командах условия являются оптимизируемыми.

Если же необходимые индексы отсутствуют, то они при выполнении команды SELECT – SQL могут быть автоматически созданы VFP и после выполнения вычислений удалены.

Не все индексы, однако, могут быть использованы рашмор-оптимизацией. К таким, в частности, относится индекс, созданный с опцией FOR, например:

index on OrdNum for Discount > 10 tag OrdDisc

или индекс, при создании которого употреблена логическая операция NOT, например:

index on not Deleted( ) tag NotDel

В то же время индекс

index on Deleted( ) tag Del

может быть использован рашмор-оптимизацией.

Замечание. Для исключения из запроса записей с пометкой удаления можно установить SET DELETED в ON.

Детали, связанные с реализацией рашмор-технологии, фирмой Microsoft не разглашаются.