2013-08-28 2 views
0

저는 인덱스를 가장 잘 이해하려고합니다.외래 키에 대한 인덱스

Microsoft SQL Server 2012를 쿼리하여 70-261 개 중 하나 인 경우 기본 또는 고유 제약 SQL Server가 자동으로 고유 인덱스를 만들 때를 말합니다.

그러나 외래 키에 대한 색인은 작성되지 않습니다.

따라서 조인을보다 효율적으로 만들려면 외래 키에 non_clustered 인덱스를 만드는 것이 가장 좋습니다.

답변

1

확실하지 않은 질문이 있습니다.

색인은 고유 제한 조건을 적용하는 데 사용됩니다.

기본적으로 FK는 색인을 필요로하지 않습니다.
그러나 FK에 인덱스가있는 경우 쿼리 최적화 프로그램에서 조인에 인덱스를 자주 사용합니다.

이 쿼리에서 docMVEnum1.valueID는 인덱스가있는 FK입니다.
쿼리 최적화 프로그램이 해당 인덱스를 사용했습니다.
색인을 사용하더라도 여전히 가장 비용이 많이 드는 부분이었습니다.

select docMVEnum1.sID, docEnum1.value 
    from docMVEnum1 
    join docEnum1 
    on docEnum1.valueID = docMVEnum1.valueID 

또한 본질적으로 FK는 종종 where 절에서 사용됩니다.

색인은 무료가 아닙니다.
선택을 향상 시키지만 삽입 및 업데이트 속도를 늦추십시오.

1

아니요, foreign keysindex을 만들 필요가 없습니다. 더 효율적으로 조인을 수행 할 것이라고 약속하지 않습니다.

고유 및 PK에 대한 색인은 INSERT 및 UPDATE 성능을 향상시키기 위해 작성됩니다. 당신이 JOIN으로 쿼리하는 동안

그것은/추구 테이블을 스캔 0 또는 1 인덱스를 사용합니다.
는 대부분의 아마 프로파일 러는 그래서 MytableColumnFK1Description에서 선택합니다 MyTable의 모든 관련 ID의를 찾을 수 index scan를 사용하는 것입니다 당신이

MyTable 
(
    ID int (PK), 
    Description varchar(max), 
    ColumnFK int (FK to LookupTable) 
) 
Table LookupTable 
(
    ID int (PK), 
    Description varchar(max) 
) 

SELECT MyTable.ID, MyTable.Description, MyTable.ColumnFK, LookupTable.Description 
FROM MyTable 
INNER JOIN LookupTable 
    on LookupTable.ID = MyTable.ColumnFK, 
WHERE ID between 5 and 10000 

같은 테이블의 몇 가지를 말할 수 있습니다.

unique 또는 pk에 FK를 추가 할 생각이라면 같은 테이블에 여러 개의 FK가있을 경우 어떻게 될지 평가하십시오.

의도적으로 술어 MyTable.Description에 추가하여 varchar (max)로 지정하여 이러한 쿼리의 데이터에 도달했음을 보여줍니다.

관련 문제