Kümelenmemiş dizinlere kümelenmiş dizin sütunları eklemek gerekli mi?


15

Kümelenmemiş bir dizinin kümelenmiş dizine dayandığı düşünüldüğünde, kümelenmemiş dizinin kümelenmiş dizinde bulunan sütunlardan herhangi birini listelemesi gerekir mi?

Diğer bir deyişle, Ürünler tablosu ProductID üzerinde kümelenmiş bir dizin içeriyorsa, ProductID sütununu eklemenin tavsiye edileceği kümelenmemiş bir dizin oluştururken yine de bunu bir sütun olarak eklemek gerekli mi?

Değilse, sütun adını kümelenmemiş dizine eklemenin iyi olacağı senaryolar var mı?

Yanıtlar:


20

SQL Server'da, kümelenmiş dizin anahtarı sütunları her zaman satır bulucu olarak işlev görecek şekilde kümelenmemiş dizine eklenir (Ref: Kümelenmemiş Dizin Anahtarları Hakkında Daha Fazla Bilgi ).

Benzersiz olarak bildirilen bir NCI için, dahil edilen sütun olarak eklenirler, aksi takdirde anahtarın sonuna eklenirler.

Varsayılan yerleşim sorgularınız için optimum değilse, sütunları açıkça eklemek isteyebilirsiniz. Örneğin ASC/ DESCyönünü kontrol etmek veya dizindeki anahtar sütunların konumunu kontrol etmek istiyorsanız.

CREATE TABLE T
(
A INT,
B INT,
C INT ,
PRIMARY KEY CLUSTERED (B DESC, C DESC)
)

/*Implicitly adds B DESC, C DESC to end of key*/
CREATE NONCLUSTERED INDEX ix1 ON T(A ASC) 

/*No sort operation*/
SELECT  *
FROM T
ORDER BY A ASC,B DESC, C DESC

/*
But the avove index won't be able to seek into A,C  
and will need a residual predicate after seeking into A.

For the following query
*/

SELECT  *
FROM T
WHERE A=1 AND C > 4
ORDER BY C ASC, B DESC

/*This index explicitly controlling the key column position 
  and direction would be better*/
CREATE NONCLUSTERED INDEX ix2 ON T(A ASC, C ASC, B DESC) 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.