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-го индекса в таблице, зависит от ваших моделей использования (пишет против чтения) и целей производительности.