2013년 10월 19일 토요일

[ORACLE SQL TIP]외래키에 인덱스 걸려 있는 않은것 조회 오라클 SQL


[ORACLE SQL TIP]외래키에 인덱스 걸려 있는 않은것 조회 오라클 SQL

부모 테이블과 자식 테이블이 서로 참조키(외래키) 관계에 있을때 
자식 테이블의 컬럼에 인덱스가 없다면 검색이나 갱신시 performance의 
문제가 있을 수 있습니다. 특히 갱신시 자식테이블에 TABLE LOCK이 걸릴 수 있습니다. 
(물론 9i에서는 shared lock이 걸려 무조건 insert가 안되는 것은 아닙니다.) 

이러한 문제가 있는 것을 조회하는 SQL 문장 입니다. 


Owner - Owner of the table 
Constraint Name - Name of the constraint 
Column Name - Name of the column 
Position - Position of the index 
Problem - Nature of the problem 


select        acc.OWNER, 
        acc.CONSTRAINT_NAME, 
        acc.COLUMN_NAME, 
        acc.POSITION, 
        'No Index' Problem 
from          dba_cons_columns acc, 
        dba_constraints ac 
where          ac.CONSTRAINT_NAME = acc.CONSTRAINT_NAME 
and          ac.CONSTRAINT_TYPE = 'R' 
and    acc.OWNER not in ('SYS','SYSTEM') 
and    not exists ( 
        select  'TRUE' 
        from    dba_ind_columns b 
        where  b.TABLE_OWNER = acc.OWNER 
        and    b.TABLE_NAME = acc.TABLE_NAME 
        and    b.COLUMN_NAME = acc.COLUMN_NAME 
        and    b.COLUMN_POSITION = acc.POSITION) 
order  by acc.OWNER, acc.CONSTRAINT_NAME, acc.COLUMN_NAME, acc.POSITION 

댓글 없음:

댓글 쓰기