2013-11-25 8 views
2

this book을 읽을 때인덱스를 만들 때 Where 절을 사용해야하는 이유는 무엇입니까?

나는 where 조건이있는 색인을 만들 수 있음을 알게되었습니다.

나는 우리가이

Create index `<index_name>` on `<table_name>` 

또는

Create index `<index_name>` on `<table_name>` Where (`<Conditions>`) 

하지만 장점이 무엇인지 모르는 같은 인덱스를 만들 수 있다는 것을 발견?

What are the benefits of a filtered index?

가장 유용한 열은 Where conditions입니까?

Create unique index IX_Contacts on Contacts(User_ID) Where (IsDefault=1) 

User_ID을 위해, 그들은 하나, 단 하나의 기본을 가질 수 있다고 말한다 :

답변

1

null이 아닌 특정 열과 대부분의 질의가있는 일부 데이터베이스에는 큰 테이블이 몇 개 있습니다 이 테이블에 액세스하면 특정 컬럼이 널이 아닌 테이블의 데이터 만 선택됩니다.

인덱스에 필터가 없으면 우리는 쿼리로 액세스하지 않을 테이블을 포함한 모든 테이블 전체를 인덱싱해야합니다.

인덱스의 필터를 사용하면 쿼리의 조건 자 (predicate)가 인덱스의 필터와 일치하므로 쿼리가 훨씬 빠르게 실행되므로 옵티마이 저는 훨씬 작은 인덱스를 선택합니다.

4

그것을 할 명백한 이유는 인덱스보다 선택하기 위해, 또는 제한을 적용하는 데 사용하는 것입니다 연락처는 Contacts 테이블에 있지만 시스템의 다른 제약 조건으로 인해 기본 연락처와 다른 많은 연락처를 가질 수 있습니다.

마찬가지로 사용자의 기본 연락처를 찾는 쿼리는 매우 좁고 선택 적이기 때문에이 인덱스를 사용하는 경향이 큽니다. 연락처의 10 %만이 사용자의 기본값 인 경우이 인덱스 (User_ID,IsDefault)에있는 색인보다 훨씬 작을 것입니다. (이 같은 질의를 만족시킬 수도 있습니다)