Bu öncelikle bileşik indekslerle kullanıldığında önemlidir:
CREATE INDEX ix_index ON mytable (col1, col2 DESC);
şunlardan biri için kullanılabilir:
SELECT *
FROM mytable
ORDER BY
col1, col2 DESC
veya:
SELECT *
FROM mytable
ORDER BY
col1 DESC, col2
, ancak şunlar için değil:
SELECT *
FROM mytable
ORDER BY
col1, col2
Tek bir sütundaki bir dizin, her iki şekilde de sıralama için verimli bir şekilde kullanılabilir.
Ayrıntılar için blogumdaki makaleye bakın:
Güncelleme:
Aslında, bu çok açık olmasa da, tek bir sütun dizini için bile önemli olabilir.
Kümelenmiş bir tablonun sütununda bir dizin düşünün:
CREATE TABLE mytable (
pk INT NOT NULL PRIMARY KEY,
col1 INT NOT NULL
)
CREATE INDEX ix_mytable_col1 ON mytable (col1)
Dizini col1
sıralı değerlerini tutarcol1
birlikte satır referansları .
Tablo kümelenmiş olduğundan, satırlara yapılan başvurular aslında pk
. Ayrıca her değeri içinde sipariş edilir col1
.
Bu, dizinin yapraklarının aslında sipariş edildiği (col1, pk)
ve şu sorgulama anlamına gelir :
SELECT col1, pk
FROM mytable
ORDER BY
col1, pk
sıralama gerektirmez.
Dizini aşağıdaki gibi oluşturursak:
CREATE INDEX ix_mytable_col1_desc ON mytable (col1 DESC)
, sonra değerleri col1
azalan olarak sıralanır, ancak pk
her değerinin içindeki değerler col1
artan olarak sıralanır.
Bu şu sorgu anlamına gelir:
SELECT col1, pk
FROM mytable
ORDER BY
col1, pk DESC
tarafından sunulabilir, ix_mytable_col1_desc
ancak tarafından sunulamaz ix_mytable_col1
.
Başka bir deyişle, CLUSTERED INDEX
herhangi bir tabloda a'yı oluşturan sütunlar her zaman o tablodaki diğer dizinlerin sondaki sütunlarıdır.