Перекрытие индекса - PullRequest
       6

Перекрытие индекса

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

Насколько я понимаю, перекрытие индекса выглядит следующим образом: -

CREATE INDEX idx1 ON TabA ( Col1, Col2, Col3 );
CREATE INDEX idx2 ON TabA ( Col1, Col2 );
CREATE INDEX idx3 ON TabA ( Col1 DESC, Col2 DESC );

В приведенной выше структуре таблицы индекс idx1 является надмножеством (перекрытием) индекса idx2 и, следовательно, является избыточным.перекрытие индекса2.Удаление таких индексов перекрытия может улучшить производительность.

Но как мы можем найти все индексы перекрытия во всей схеме Oracle 11gR2?Кто-нибудь, пожалуйста, направьте меня? Спасибо заранее.

1 Ответ

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

Вы можете запросить user_ind_columns упорядочение и объединение столбцов по column_position, а затем выполнить самостоятельное объединение для сравнения.

WITH indx AS ( SELECT table_name,index_name,LISTAGG(column_name,',') WITHIN GROUP(
                    ORDER BY column_position
               ) AS cols
FROM user_ind_columns a
               GROUP BY table_name,index_name
)
SELECT a.table_name,a.index_name AS sup_index,b.index_name sub_indx,
a.cols as super_set,b.cols AS sub_set
FROM indx a
JOIN indx b ON a.table_name = b.table_name
               AND a.index_name != b.index_name 
               where ','|| a.cols||',' like ',%'|| b.cols|| '%,';

Результат

TABLE_NAME    SUP_INDEX                   SUB_INDX            SUPER_SET                SUB_SET       
TABA           IDX1                       IDX2                 COL1,COL2,COL3            COL1,COL2      
JOB_HISTORY    JHIST_EMP_ID_ST_DATE_PK    JHIST_EMPLOYEE_IX    EMPLOYEE_ID,START_DATE    EMPLOYEE_ID    


2 rows selected. 

Примечание : База данных Oracle обрабатывает нисходящие индексы , как если бы они были индексами на основе функций , и поэтому имена столбцов нельзя сравнивать напрямую с помощью этого метода.

Также обратите внимание, что это утверждение you является спорным.

Удаление таких индексов перекрытия (т. Е. Index2) может улучшить производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...