Производительность Oracle с несколькими одинаковыми индексами столбцов

StackOverflow https://stackoverflow.com/questions/1019940

  •  06-07-2019
  •  | 
  •  

Вопрос

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

  • Индекс 1:Кола, КолБ
  • Индекс 2:Кола

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

Это было полезно?

Решение

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, чтобы получить другой ответ.

Другие советы

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

Как насчет этого запроса:

SELECT DISTINCT ColA FROM TABLE WHERE ColA IS NOT NULL;

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top