Des fois lorsque vous faites des vérifications il est important de vérifier si les FK ont une indexe de renforcement créé afin d'éviter des problèmes de performance, voici un script qui peut vous être utile.
Bien sûr, après cette première vérification il faudrait valider si les colonnes ne font pas partie d'un autre index ou s'il y a d'autres raisons qui pourraient "justifier" un manque d'indexe.
Voici le script :
SELECT QRY.OWNER, QRY.TABLE_NAME, QRY.CONSTRAINT_NAME, QRY.INDEX_NAME, QRY.CONSCOLUMNS, QRY.INDCOLUMNS
FROM (
SELECT LIST_CONST.OWNER, LIST_CONST.TABLE_NAME, LIST_CONST.CONSTRAINT_NAME, LIST_IND.INDEX_NAME,
LIST_CONST.CONSCOLUMNS, LIST_IND.INDCOLUMNS
FROM (SELECT BB.OWNER, BB.TABLE_NAME, BB.CONSTRAINT_NAME,
LTRIM(MAX(SYS_CONNECT_BY_PATH(BB.COLUMN_NAME,',')) KEEP (DENSE_RANK LAST ORDER BY curr),',') AS CONSCOLUMNS
FROM (SELECT B.OWNER, B.TABLE_NAME, B.CONSTRAINT_NAME, C.COLUMN_NAME, C.POSITION,
ROW_NUMBER() OVER (PARTITION BY B.CONSTRAINT_NAME ORDER BY C.POSITION) AS CURR,
ROW_NUMBER() OVER (PARTITION BY B.CONSTRAINT_NAME ORDER BY C.POSITION)-1 AS PREV
FROM DBA_CONSTRAINTS B, DBA_CONS_COLUMNS C
WHERE B.OWNER = C.OWNER AND
B.CONSTRAINT_NAME = C.CONSTRAINT_NAME AND
B.CONSTRAINT_TYPE = 'R'
) BB
GROUP BY BB.OWNER, BB.TABLE_NAME, BB.CONSTRAINT_NAME
CONNECT BY PREV = PRIOR CURR AND BB.CONSTRAINT_NAME = PRIOR BB.CONSTRAINT_NAME
START WITH CURR = 1
) LIST_CONST,
(SELECT AA.TABLE_OWNER, AA.TABLE_NAME, AA.INDEX_NAME,
LTRIM(MAX(SYS_CONNECT_BY_PATH(AA.COLUMN_NAME,',')) KEEP (DENSE_RANK LAST ORDER BY curr),',') AS INDCOLUMNS
FROM (SELECT A.TABLE_OWNER, A.TABLE_NAME, A.INDEX_NAME, A.COLUMN_NAME, A.COLUMN_POSITION,
ROW_NUMBER() OVER (PARTITION BY A.INDEX_NAME ORDER BY A.COLUMN_POSITION) AS CURR,
ROW_NUMBER() OVER (PARTITION BY A.INDEX_NAME ORDER BY A.COLUMN_POSITION)-1 AS PREV
FROM DBA_IND_COLUMNS A, DBA_INDEXES AA
WHERE A.INDEX_OWNER = AA.OWNER AND
A.INDEX_NAME = AA.INDEX_NAME
) AA
GROUP BY AA.TABLE_OWNER, AA.TABLE_NAME, AA.INDEX_NAME
CONNECT BY PREV = PRIOR CURR AND AA.INDEX_NAME = PRIOR AA.INDEX_NAME
START WITH CURR = 1
) LIST_IND
WHERE LIST_IND.TABLE_OWNER (+) = LIST_CONST.OWNER AND
LIST_IND.TABLE_NAME (+) = LIST_CONST.TABLE_NAME AND
LIST_IND.INDCOLUMNS (+) LIKE LIST_CONST.CONSCOLUMNS || '%'
) QRY
WHERE QRY.INDEX_NAME IS NULL
ORDER BY QRY.OWNER, QRY.TABLE_NAME ;
Aucun commentaire:
Enregistrer un commentaire