foreign key 컬럼도 nonclusterd index 추가 해야하나요? 0 1 595

by 한번사는인생 [SQL Query] [2020.08.04 17:47:54]


CREATE INDEX IX_TABLE_NAME
ON TABLE (column1, column2)
INCLUDE (fk_column, column3, column4, column5)

위에와 같이, nonclusterd index를 추가했습니다.

저는 이유는 정확하게 모르겠지만,

당연히 FK 컬럼은 추가할 필요 없다고 생각했습니다.

 

속도가 느려서 실행계획을 돌려봤더니,

FK 컬럼도 Index 추가하라는 메시지가 떠서 추가했더니 정상적인 속도의 쿼리가 되었습니다.

 

FK도 당연시 인덱스를 걸어되는건가요?

by 마농 [2020.08.05 08:15:00]

fk 는 테이블간에 관계가 있음을 의미합니다.
fk_column 은 조인 조건에 사용되는 항목일 테구요.
예를 들어 다음과 같은 쿼리가 있다고 할 때
 

SELECT a.column1
     , a.column2
     , b.column6
  FROM t_a a
 INNER JOIN t_b b
    ON a.fk_column = b.pk_column
 WHERE a.column1 = 'aaa'
;

a.column1 = 'aaa' 조건을 인덱스 스캔으로 찾는데
만약 fk_column 이 INCLUDE 되어 있지 않다면?
이 항목을 조인에 사용하기 위해서는 다시 한번 테이블에 접근해서 가져와야 하는데.
만약 fk_column 이 INCLUDE 되어 있다면?
테이블 접근 없이 인덱스 스캔만으로도 원하는 결과를 얻을 수 있습니다.

"당연히"라는 표현을 쓰셨는데..."당연히"는 100% 를 의미하죠.
당연히 해야 하는 것은 아니고, 위와 같은 쿼리를 자주 사용한다면 하는것이 좋겠지요.
위와 같은 쿼리가 사용되지 않는다면 억지로 할 필요는 없겠네요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입