2009-03-06 6 views
2

bir dizin oluşturma:düzgün ben SQL Server 2005'te aşağıdaki çok büyük tablo var

create table Blah 
(
    FirstName varchar(30), 
    Rank int, 
    Position int, 
    ... 
) 

Bunun üzerine aşağıdaki sorguyu çalıştırır:

declare @PassedInFirstName varchar(30) 
set @PassedInFirstName = 'SomeName' 

select TOP 1 Position 
from Blah 
where FirstName = @PassedInFirstName 
order by Rank DESC 

ben kuruyorum şu üzerinde endeksi:

CREATE INDEX IX_Blah ON Blah (FirstName, Rank) 

Ben, Sıra DESC tarafından sipariş bir inen bir şekilde Rank sipariş endeksi değiştirmek gerektiğini Verilen:

CREATE INDEX IX_Blah ON Blah (FirstName ASC, Rank DESC) 

Veya önemi yok mu?

Teşekkürler.

cevap

3

unutmak birçok satır.

Ben mantıksal IO Ayrıca

bir ORDER BY maç için INDEX içinde DESC kullanarak% 50 oranında azaltıldı sonuçları gördüm kapsayan sorgu değiştirin:

SQL 2005 +:

CREATE INDEX IX_Blah ON Blah (FirstName, Rank DESC) INCLUDE (Position) 

SQL 2000, SQL 7:

CREATE INDEX IX_Blah ON Blah (FirstName, Rank DESC, Position) 
+0

+1 – AngryHacker

2

Dizininizde azalan bir değer olarak Sıralama eklemek yalnızca küçük bir değişikliktir. Sql Server muhtemelen kullanılan sıralamayı tersine çevirebilir, ya da bu durumda, listedeki son öğeye kolayca yineleyebilirsiniz.

Birincil anahtarınızı konumlandırıyor mu? Bir dizin, dizinlenmiş sütun, birincil anahtar ve isteğe bağlı olarak dahil edilen sütunlardan oluşur. Eğer pozisyon birincil anahtarınız değilse, o zaman şu anda ana anahtarınızı indeksinize göre araştırıyorsunuz, daha sonra sonucu, Ana değer dizini ile konum değerini bulmak için araştırıyorsunuz. Konum değerini dahil edilmiş bir sütun olarak eklemeyi deneyin ve yalnızca bir dizine dayalı olarak sorgunuzu yürütmeniz gerekir, başka bir dizin kullanılmayacaktır. NEREDE getiri eğer fayda olursa

CREATE INDEX IX_Blah ON Blah (FirstName, Rank DESC) INCLUDE (Position) 

Dont vb, sen hangi dizinleri kullanılır (SQL Server 2008 varsayılarak), herhangi bir dizin eksikliği varsa onlar size söyleyebilirim, sorgu planları kontrol etmek

+0

Burada yer alan birincil anahtarlar veya benzersiz sütunlar bulunmamaktadır. Kaplama parçası için – AngryHacker

0

benim önceki s kimlik berbat ost, bu benim kayıtlı kullanıcım.

Dizin, seçtiğiniz sütunlara ve birincil anahtara dayalıdır. Temel olarak bir hashmap saklıyorsunuz, anahtar (İlk Ad, Sıralama) kimliğinize (birincil anahtarınızın Kimliği olduğunu varsayarak) çözümleniyor. Bu kimlik daha sonra Pozisyon değerini okumak için kullanılır.

Benim önerim, Konum değerini dahil edilmiş bir sütun olarak dizine dahil etmek olacaktır. Bu, ikinci aramadan kaçınarak endeksten verileri okumanızı sağlar.