SQL Server dizin, artan veya azalan, ne fark eder?
MS SQL Server veya sütun numarası (2005 versiyonunu kullanıyorum) üzerinde bir dizin oluşturduğunuzda, her bir sütun üzerinde dizin artan azalan veya belirtebilirsiniz. Zor zamanlar, bu seçimi neden burada anlamakta güçlük çekiyorum. İkili sıralama teknikleri kullanarak, bir arama her iki şekilde de aynı hızda olmaz mı? Ne fark ben tercih eder?
CEVAP
Bu öncelikle bileşik endeksleri ile birlikte kullanıldığında önemli:
CREATE INDEX ix_index ON mytable (col1, col2 DESC);
ikisi için de kullanılabilir:
SELECT *
FROM mytable
ORDER BY
col1, col2 DESC
ya da:
SELECT *
FROM mytable
ORDER BY
col1 DESC, col2
ama değil:
SELECT *
FROM mytable
ORDER BY
col1, col2
Tek bir sütun üzerinde bir dizin verimli bir şekilde her iki yönde de sıralama için kullanılabilir.
Blogumda ayrıntılı bilgi için: makaleye bakın
Güncelleme:
Aslında, bu o kadar açık değil olsa bile tek sütun bir dizin için önemli olabilir.
Kümelenmiş bir tablo bir sütun üzerinde 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)
col1
dizin satır başvuruları ile birlikte col1
değerleri sipariş tutar.
Tablo kümelenmiş olduğu satır için başvuru aslında pk
değerleri. Ayrıca col1
her bir değeri içinde kalırlar.
Bu Endeksin bırakır aslında ** 17, ve bu sorgu üzerinde sıralanır anlamına gelir:
SELECT col1, pk
FROM mytable
ORDER BY
col1, pk
sıralama ihtiyacı yok.
Eğer aşağıdaki gibi indeks oluşturmak:
CREATE INDEX ix_mytable_col1_desc ON mytable (col1 DESC)
col1
değerleri azalan, ama col1
Her bir değeri içinde pk
değerleri sıralanır yükseliyor. sıralanır , sonra
Bu aşağıdaki sorgu anlamına gelir:
SELECT col1, pk
FROM mytable
ORDER BY
col1, pk DESC
ix_mytable_col1_desc
tarafından servis edilebilir ama ix_mytable_col1
tarafından değil.
Diğer bir deyişle, herhangi bir tabloyu CLUSTERED INDEX
oluşturan sütunlar her zaman o masada başka bir dizinin sonunda sütunlar.
Char, nchar, varchar, ve SQL Server nv...
SQL Server üzerinde INSERT VEYA UPDATE...
Server.(&;. "&MapPath quot;), Sunucu.M...
Simülatör veya Öykünücüsü? Fark nedir?...
Nasıl bir dizin C veya C kullanarak do...