Влияние снижения показателей низкой селективности в оракуле - PullRequest
0 голосов
/ 08 июня 2019

Мы знаем, что можем рассчитать селективность, используя следующие формулы: -

Sql> Selectivity = Distinct Values / Total Number Rows;

Sql>

SELECT DISTINCT_KEYS, NUM_ROWS,(DISTINCT_KEYS/NUM_ROWS) AS SELECTIVITY,B.*
        FROM DBA_INDEXES B
        WHERE INDEX_NAME  IN('Idx1','Idx11','Idx2') 
        AND  OWNER NOT IN('SYS','SYSTEM');

В моем приложении есть много индексов с уникальным значением ключа 2, 3, 4 или 5, и администратор БД хочет удалить эти индексы.

Может ли какой-либо орган объяснить, пожалуйста, влияние падения индексов низкой / высокой селективности, где число уникальных ключевых значений равно 2, 3, 4 или 5. Как рассчитать значение уникального ключа для этих индексов. Спасибо !!

Ответы [ 2 ]

2 голосов
/ 08 июня 2019

Удаление этих индексов без теста производительности и / или без проверки, используются ли они, является действительно плохой идеей.

Давайте попробуем пример.Предположим, что у нас есть таблица с заказами или что-то.Существует программа, которая запускается время от времени и запрашивает новые записи для обработки.Поиск по статусу.Новые заказы имеют статус NEW.После обработки они получают статус ОБРАБОТАНО или ОТКАЗАНО.Другими словами, есть три возможных значения.Предположим, что существует несколько миллионов записей и что обычно их около ста со статусом NEW.

Что происходит со временем опроса, если индекс, который обычно очень избирателен для NEW записей, отбрасывается?

Что касается записи, я знаю, что можно использовать NULL для записей, которые не следует индексировать, и что модель данных может быть реорганизована и т. Д. И т. П., Но это довольно распространенное решение в дикой природе.Простое удаление индекса повредило бы.

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

1 голос
/ 08 июня 2019

Удаление индекса может быть излишним и может оказать значительное влияние на ваше приложение. Oracle предлагает для этого другие функции.

Сначала рассмотрите МОНИТОРИНГ ИНДЕКСОВ или Отслеживание использования индекса (если вы уже используете версию 12.2 или выше)

Очень быстрая альтернатива удалению индекса - сделать его невидимым:

ALTER INDEX ind_xyz INVISIBLE;

Невидимый индекс не виден оптимизатором, т. Е. Он не будет использоваться ни для каких запросов или операций DML. Обратите внимание, что вы можете обойти это поведение на уровне сеанса с помощью

ALTER SESSION SET OPTIMIZER_USE_INVISIBLE_INDEXES = TRUE;

Если вы установите для этого параметра значение TRUE, оптимизатор будет использовать индексы независимо от их видимости. Значение по умолчанию FALSE

Также следует отметить, что индексы BITMAP на самом деле предназначены для низкой селективности - так они спроектированы и работают оптимально.

...