Использование индексов для оптимизации вычислений 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 не разглашаются. |