Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VisualFoxPro.doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

8.2.4. Потенциально оптимизируемые Команды

Следующие команды, если они выполняются с опцией FOR, потенциально рашмор-оптимизируемые:

AVERAGE

BLANK

BROWSE

CALCULATE

CHANGE

COPY

COPY TO ARRAY

COUNT

DELETE

DISPLAY

EDIT

EXPORT

INDEX

LABEL

LIST

LOCATE

RECALL

REPLACE

REPLACE FROM ARRAY

REPORT

SCAN

SET DELETED

SET FILTER

SORT

SUM

TOTAL

Если наряду с опцией FOR используется Scope, то оптимизация может быть выполнена, если Scope – это ALL (используется по умолчанию) или REST.

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

Рашмор-оптимизация будет более эффективна, если не установлен активный индекс. Так, код

scan for Between(AuthorId, 500, 700)

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

endscan

будет более продуктивен, если перед циклом вместо

use Authors order tag AuthorId

употребить

use Authors

Тег AuthorId не является активным, но он открыт, поскольку является частью структурного индекса, открываемого вместе с таблицей.

Рашмор-оптимизация не будет выполняться, если:

  • не удается оптимизировать FOR-выражение;

  • команда помимо опции FOR содержит опцию WHILE или Scope со значением NEXT или значением RECORD;

  • недостаточен объем оперативной памяти.

8.2.5. Управление рашмор-оптимизацией

Команда

SET OPTIMIZE ON | OFF

включает (ON) или отключает (OFF) рашмор-оптимизацию. По умолчанию действует ON.

Отключить рашмор-оптимизацию потребуется, если оптимизируемая команда модифицирует используемые для оптимизации индексы.

Установка SET OPTIMIZE распространяется на все команды. Кроме того, каждая оптимизируемая команда будет исполняться без рашмор-оптимизации, если употреблена с опцией NOOPTIMIZE.

Функция

SYS(3054 [, 0 | 1 | 11 | 2 | 12] [, cMemvar])

включает или отключает отображение уровней рашмор-оптимизации запросов. Возвращает строку, содержащую номер текущего уровня отображения сведений о рашмор-оптимизации запроса (число 0, 1, 2, 11 или 12).

Параметры:

0 – (по умолчанию) отключает вывод сведений о рашмор-оптимизации; значение переменной, заданной строкой cMemvar, не отображается.

1 – активизирует вывод сведений о рашмор-оптимизации фильтров.

11 – активизирует вывод сведений о рашмор-оптимизации объединений.

2 – то же, что и 1 плюс вывод текста SQL-запроса.

12 – то же, что и 11 плюс вывод текста SQL-запроса.

cMemvar – строка, содержащая имя переменной, в которую заносится получаемая функцией SYS(3054) информация. Значение переменной может быть проанализировано после выполнения запроса.

Уровни рашмор-оптимизации запроса описаны в табл. 8.2.

Таблица 8.2

Уровни рашмор-оптимизации запроса

Уровни рашмор-оптимизации

Описание

Отсутствует

Запрос не может быть оптимизирован средствами рашмор-технологии

Частичная

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

Полная

Запрос полностью оптимизирован. Выводится список индексов, используемых рашмор-оптимизацией

Функция позволяет проанализировать, насколько текст запроса приемлем для рашмор-оптимизации. Если выяснится, что уровень оптимизации недостаточен, то можно принять решение об изменении текста запроса.

Пример. Выводится информация о рашмор-оптимизации запроса, выбирающего книги, содержащие романы и/или рассказы.

local rushMore

? Sys(3054, 11, "rushMore") && Напечатает: 11

close databases

open database 'd:\FoxProBooks\HomeLibrary\HomeLibrary'

select distinct Book from Books as B ;

inner join BooksContent as C on B.BookId = C.BookId ;

inner join WorkType as W on C.TypeId = W.TypeId ;

where Left(W.WorkType, 2) like "Р_"

? rushMore

Результат:

Rushmore optimization level for table b: none

Rushmore optimization level for table c: none

Rushmore optimization level for table w: none

Joining table W and table C using index tag TypeId

Joining intermediate result and table B using index tag BookId

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]