2012-04-17 5 views
0

IMHO SQL 서버는 인덱스가 쿼리에 사용하기 위해 무엇인지 자체를 선택할 수 있습니다. 좋아SQL Server에서 둘 이상의 인덱스를 사용할 수 있습니까?

어떤이 (의사 코드) 같은 약 :

select __a from tbl where __a not in 
(
    select __b from tbl 

) 

(의 우리가 (__a)입니다 index_1 여전히 (__b)

윌 SQL 서버입니다 index_2가 있다고 가정 해 보자 하나를 사용하여 인덱스를 실행하거나 여러 인덱스를 함께 사용하면 ...?

+0

왜 실행 계획을보고 직접 보십니까? –

+0

@ MДΓΓLLLLLL 당신에게 트 러스 티 (trouth)를 말하면, 나는 계획에서이 정보를 어디에서 찾을 수 있는지 모른다. –

+0

http://stackoverflow.com/search?q=%5Bsql-server%5D+execution+plan –

답변

6

첫째, 만들고, 테이블 :

USE tempdb; 
GO 
CREATE TABLE dbo.tbl(__a INT, __b INT); 

다음 만들기를 두 개의 인덱스 :

CREATE INDEX a_index ON dbo.tbl(__a); 
CREATE INDEX b_index ON dbo.tbl(__b); 

지금 일부 데이터로 채 웁니다

INSERT dbo.tbl(__a, __b) 
    SELECT [object_id], column_id 
    FROM sys.all_columns; 

이제 쿼리를 실행에 실제 실행 계획을 설정 . 당신은 (사실 __b에 인덱스 행을 제거하기 위해 추구 하위 쿼리에서 데이터 검색을 위해 그리고으로 모두 사용) 예, 모두 인덱스를 사용하는 것을 보여이 같은 것을 볼 것입니다 :

enter image description here

이제 여기에 전체 계획의

select __a from dbo.tbl AS t where not exists 
(
    select 1 from dbo.tbl AS t2 
    where t2.__b = t.__a 
); 

(다시, 모두 인덱스가 사용되지만, 훨씬 적은 작업이 얼마나주의) : 쿼리를 작성하는보다 효율적인 방법이 될 것

enter image description here

+0

노력에 감사드립니다. 정말 감사. 큰 +1. –

관련 문제