2010-10-07 17 views
8

Rozumiem, że indeksy kompozytowe są zawsze używane od lewej do prawej (np. Jeśli indeks był w mieście, województwie, WHERE mieście = "bla" lub gdzie miasto = "bla" i państwa = "AA" działałoby dobrze, ale WHERE State = "AA" nie byłoby).Indeks złożony a INCLUDE Indeks pokrywający w SQL Server

Czy ta sama zasada ma zastosowanie do indeksów INCLUDE?

Z góry dziękuję!

Glina

Odpowiedz

13

Dołącz kolumny mogą być wykorzystywane wyłącznie do zasilania kolumny do części SELECT zapytania. Nie mogą być używane jako część indeksu do filtrowania.

EDIT: Aby dokładniej wyjaśnić swój punkt, należy rozważyć następujący przykład:

utworzyć prostą tabelę i wypełnić go:

create table MyTest (
    ID int, 
    Name char(10) 
) 

insert into MyTest 
    (ID, Name) 
    select 1, 'Joe' union all 
    select 2, 'Alex' 

Rozważmy teraz te 3 indeksów i odpowiadających im planów wykonawczych dla prosty WYBIERZ.

select ID, Name 
    from MyTest 
    where Name = 'Joe' 

Przypadek 1: Indeks na zaledwie wyników ID w tabeli SCAN.

create index idx_MyTest on MyTest(ID) 

alt text

Przypadek 2: Indeks identyfikatora tym imieniu. Nieco lepiej, ponieważ indeks obejmuje zapytanie, ale nadal otrzymuję operację SCAN.

create index idx_MyTest on MyTest(ID) include (Name) 

alt text

Przypadek 3: Indeks nazwisk na tym ID. To jest najlepszy. Indeks jest zbudowany na kolumnie w mojej klauzuli WHERE, więc otrzymuję operację SEEK, a indeks obejmuje zapytanie z powodu uwzględnionej kolumny.

create index idx_MyTest on MyTest(Name) include (ID) 

alt text

+0

Dzięki Joe. Widzę, gdzie nie byliby sami pomocni, ale gdyby nie można ich było użyć do filtrowania, nie byłoby sensu ich istnienia. – PseudoToad

+0

Nie mam nic przeciwko głosowaniu w dół, jeśli się mylę, ale nie podoba mi się anonimowe głosowanie bez żadnego wyjaśnienia. Czy możesz wyjaśnić swój sprzeciw? –

+0

-1 Nie zgadzam się z "nie mogą być używane jako część indeksu do filtrowania". Można utworzyć indeks cvoering, dodać warunek w kolumnie w klauzuli INCLUDE, a indeks nadal będzie obejmował. Mój downwote nie jest anonimowy. –

Powiązane problemy