2010-10-07 19 views
8

Ben Kompozit endeksler hep (Soldan Sağa kullanılan anlıyorum, SQL Server Örtü Index DAHİL örneğin bir Endeksi Şehir, İl İl = "Filan" veya Şehir = "Filan" VE Devletin üzerinde olsaydı = "AA" iyi çalışırdı ama WHERE State = "AA" olmazdı).Bileşik Endeksi

Aynı prensip INCLUDE dizinleri için de geçerli midir?

Şimdiden teşekkürler!

Kil

cevap

13

sütunlar yalnızca sorgunun SELECT kısmına sütunları tedarik kullanılabilir ekleyin. Filtreleme için dizinin bir parçası olarak kullanılamazlar.

DÜZENLEME: ayrıca benim açımdan netleştirmek Bu örneği düşünün:

Ben basit bir tablo oluşturmak ve bunu doldurmak:

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

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

Şimdi bu 3 endeksler ve bunlara karşılık gelen yürütme planları dikkate basit SELECT.

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

Durum 1: Bir TABLO TARAMA sadece kimlik sonuçlarına dizini.

create index idx_MyTest on MyTest(ID) 

alt text

Durum 2: adı dahil kimliği üzerine bir indeks. Biraz daha iyi çünkü endeks sorguyu kapsıyor, ancak hala bir SCAN operasyonu var.

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

alt text

Vaka 3: kimliği de dahil Name dizini. Bu en iyisi. endeks benim WHERE yan tümcesinde sütun üzerinde inşa, bu yüzden bir operasyon SEEK olsun ve endeks için eklenmeyecek sütunun sorgu kapsar.

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

alt text

+0

teşekkürler Joe. Onların kendilerine yardımcı olmayacakları yerleri görebiliyorum ama eğer filtreleme için kullanılamıyorlarsa, varlıklarının bir anlamı olmazdı. Yanılıyorsam – PseudoToad

+0

Ben aşağı oyu sakıncası, ama hiçbir açıklama ile anonim aşağı oyu sevmediğiniz. İtirazını açıklayabilir misin? –

+0

-1 "Onlar filtreleme için dizinin parçası olarak kullanılamaz" katılmıyorum. Bir cvoering indeksi oluşturabilir, INCLUDE fıkrasında bir sütuna bir koşul ekleyebilir ve endeks hala kapsamını koruyacaktır. Reddetmem anonim değil. –