Стратегия доступа к данным при вычислении многопеременных предикатов
Выбор стратегии доступа для вычисления многопеременного предиката осуществляется по следующим критериям:
-
предикат типа < столбец1 > < OP > < столбец2 > будет обрабатываться слиянием индексов, если < OP > – операция «=» или «!=», < столбец1 > и < столбец2 > – либо индексированные столбцы, либо ROWID, либо выражения, для которых построен временный индекс;
-
для многопеременных предикатов используются составные индексы, если существуют два таких индекса T1(C1,C2,...,CN) и T2(C1,C2,...CN), что в группу входят все предикаты типа T1.C1=T2.C1, T1.C2=T2.C2, ... T1.CJ=T2.CJ для J >= 2;
-
если в одной части предиката находится индексированный столбец (или ROWID, или производный столбец, полученный из индексированного без каких-либо преобразований), а в другой части – выражение, не зависящее от переменной этого столбца, то один предикат обрабатывается по индексу, и происходит перебор по значениям всех остальных переменных.
Полный перебор для многопеременных предикатов осуществляется с помощью циклического прохода по каждой из участвующих переменных в отдельности (либо по всем значениям этой переменной, либо по значениям, отобранным в процессе обработки однопеременных предикатов по этой переменной).
При выборе любой стратегии, кроме использования составных индексов, осуществляется проверка на возможность оптимизации выполнения предиката с помощью построения временных индексов. Временные индексы полезны, если в одной из частей предиката стоит выражение с одной переменной или неиндексированный столбец. Временный индекс создается также в случае, если столбец индексирован, но содержит значительно больше значений по сравнению с уже отобранным множеством. Временные индексы удаляются сразу же после завершения обработки предиката.