Oracle разделение и локальный Indexex (12c)

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

idx1: (год, wk, pd, sku) idx2: (sku, str)

Мой недостаток в том, что idx2 является избыточным, и вы можете просто создать один индекс с (year,wk, pd, sku, str), чтобы воспользоваться преимуществом пропуска сканирования. Есть мысли или комментарии?

2 ответа

Решение

Индексирование ключа раздела является избыточным, так как удаление раздела эффективно "индексирует" это поле, и это сокращение происходит до того, как будет прочитан какой-либо индекс. В этот момент сканирование с пропуском будет работать нормально, при условии, что оптимизатор не оценивает сканирование с пропуском выше, чем полное сканирование раздела.

Предполагая, что у вас есть запрос, указывающий только sku а также str, затем idx2 не является избыточным.

С помощью idx1у тебя еще есть как минимум 52 недели х?? (не знаю что pd is...) = 52 или более индексных поддеревьев для INDEX SKIP SCAN просматривать через раздел.

INDEX SKIP SCAN на idx1 сделает более 52 индексных зондов. INDEX RANGE SCAN на idx2 будет один зонд на раздел (который можно сократить до 1 общего зондирования, сделав его глобальным индексом).

Так, idx2 предлагает преимущества. Оправдывают ли эти преимущества стоимость 2-го индекса в таблице, зависит от ваших моделей использования (пишет против чтения) и целей производительности.

Другие вопросы по тегам