2009-06-19 5 views
5

Я работать с новым Oracle DB, с одной таблицы, имеющие следующие показатели:производительности Oracle с несколькими одинаковыми индексами столбцов

  • Индекс 1: COLA, ColB Индекс
  • 2: COLA

Является ли второй индекс избыточным, и будет ли это негативно влиять на производительность?

ответ

5

Google мой лучший друг:

http://www.orafaq.com/node/926

Основной пункт этой статьи:

If 2 indexes (I1 and I2) exist for a table and 
    the number of columns in Index I1 is less or equal to the number of column in index I2 and 
    index I1 has the same columns in the same order as leading columns of index I2 
Then 
    If index I1 is UNIQUE then 
     If index I2 is used to support Foregh Key or for Index Overload then 
     Do Nothing 
     Else 
     Index I2 can be DROPPED 
     End If 
    Else 
     Index I1 can be DROPPED 
    End If 
End If 

И я Я согласен с этим! На самом деле, поиск «повторяющихся индексов» в Google, чтобы иметь другой ответ.

+1

Это, вероятно, справедливо в большинстве случаев, но см. Мой ответ, когда может быть неправильно сбросить перекрывающий индекс. –

1

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

При этом Index2 не является полностью избыточным, поскольку он может быть немного быстрее, поскольку сам индекс, вероятно, будет значительно меньше.

1

есть вероятность, что если ваша статистика устареет, оптимизатор может выбрать индекс 2, если необходим индекс 1. (Намек на оптимизатор решит, что, конечно же.)

2

Второй индекс отличается и не является избыточным как таковым.

Как об этом запросе:

SELECT DISTINCT ColA FROM TABLE WHERE ColA IS NOT NULL; 

Oracle может ответить на этот вопрос полностью из индекса 2. Теперь, индекс 2 можно было бы ожидать, что небольшие (меньше блоков), чем индекс 1. Это означает, что он является лучший индекс для вышеуказанного запроса.

Если ваше приложение никогда не делает запрос, который подходит Index2 лучше, чем Index1, то он является избыточным для вашего приложения.

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

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