Классика баз данных - статьи

       

Y не может получить удачное


Например, индекс на столбцах X и Y не может получить удачное старт/стопное условие при наличии предиката на Y, если не имеется предиката и на X.

Предикат может всегда применяться как старт/стопный ключ, только если операцией сравнения в предикате является «=». Если имеется предикат на столбце «=», «≥» или «≤», то предикаты на последующих столбцах являются кандидатами на старт/стопные условия. Однако после первого предиката со сравнением на неравенство последующие столбцы индекса не являются полезными и могут быть применены как SARG’и. Например, предположим, что имеется единственный индекс на столбцах X, Y и Z. Для предикатов X = 5, Y ≥ 7, Z ≥ 'B' в DB2 был бы построен стартовый ключ 57, стоповый ключ 5, и предикат на Z применялся бы как SARG. В DB2/* с использованием Stardurst будет построен ключ 57'B', и предикат на Z будет применен и как SARG, потому что сканирование индекса, начинающееся с этого значения ключа, может включать такие значения, как 58'A', не удовлетворяющие предикату на Z. Если бы предикат на Y ≥ 7 был строгим неравенством, в DB2/* Version 1 сканирование начиналось бы с 57, и предикаты на Y и Z применялись бы как SARG’и.

Поскольку столбцы индекса могут в индивидуальном порядке объявляться как упорядоченные по возрастанию или по убыванию, для столбцов индекса с упорядочением по убыванию старт/стопные условия должны перевертываться; например, если столбец Z упорядочивается по убыванию, то Z > 'B' является его стоповым условием. Наконец, когда уникальный индекс является «полностью уточненным» (т.е. со всеми его столбцами связаны предикаты сравнения по равенству), все оптимизаторы DB2 понимают, что может быть выбрана, самое большее, одна строка, так что менеджер данных может пользоваться ускоренным доступом, и могут быть предприняты другие средства эффективной обработки.

Если оптимизатор определяет, что индекс содержит все столбцы таблицы, к которой адресуется запрос, или если запрос имеет вид SELECT MIN(SALARY) FROM EMP,

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

Содержание  Назад  Вперед