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

       

и тот же индекс может


Один и тот же индекс может использоваться много раз. Например, если для таблицы T имеется единственный индекс I на столбцах C1 и C2, то для запроса SELECT C1,C2 FROM T WHERE C1 = 10 AND (C2 = 32 OR C2 = 97)

в DB2 для MVS индекс I мог бы использоваться дважды, один раз со стартовым и стоповым ключом 1032, а другой раз – 1097. Поддерживается любой уровень вложенности AND/OR, и может использоваться любое число индексов с учетом возможных ограничений по памяти. Для обработки нескольких индексов оптимизатор производит очень подробный анализ для определения наилучшего порядка обработки, минимизирующего как использование памяти (число RID’ов), так и число обращений к таблице. Во время выполнения этот план может быть изменен или остановлен, как это описывается в разд. 7.4.

Одной из опасностей использования индекса в операторе UPDATE является то, что обновленные строки могут быть помещены далее текущей позиции индексного скана и обновлены еще раз, если выбирается инекс на обновляемом столбце. Например, следующий оператор мог бы привести к бесконечному увеличению зарплаты, если бы для сканирования EMP использовался индекс на SALARY: UPDATE EMP
SET SALARY = SALARY * 1.1

Эта семантическая аномалия была любовно названа «проблемой Хеллоуин» покойным Мортоном Астраханом (Morton Astrahan), посольку Пат Селинджер (Pat Selinger) обнаружила ее в Хеллоуин. Эта проблема возникает только из-за того, что доступ к строкам и их обновления конвейеризуются, что обычно бывает полезно, и ее можно избежать путем сбора всех RID’ов строк, подлежащих обновлению, до начала их обновления.


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