Dahil Edilen Sütun ve Filtrelenmiş Dizin Karşılaştırması


11

Şu anda tb_tranfers adlı tablo ile çalışıyoruz . Bu tabloda 40 milyon satır vardır ve ~ 26 GB boyutundadır (11 GB veri, 15 GB dizin).

Satırların% 10 ila 15'i yumuşak silinmiş satırlardır ( DeletedDate boş değil). Uygulama yalnızca DeletedDate öğesinin boş olduğu satırları kullanır . Bu tabloya yapılan tüm sorgular bu etkiye ilişkin bir madde içerir.

Bu tabloda 15 dizin vardır. Eksik dizin DMV, dahil edilen sütun olarak DeletedDate ile dizinler oluşturmak için öneriler içerir .

WHERE DeleteDdate IS NULLKümelenmemiş 11 dizinin hepsinde filtrelenmiş bir dizin kullanmak yardımcı olur mu? Yoksa DeletedDate sütununu dahil edilen bir sütun olarak kullanmak daha mı iyi olur ?

Yanıtlar:


12

Evet, filtrelenecek dizinlerin ( CREATE INDEX ... ON ... WHERE DeletedDate IS NULL) 11 NC dizininin tümünü değiştirmek yardımcı olacaktır. Bu şekilde iki avantaj elde edersiniz:

  • Sorgu Optimizer herhangi satır zaten bu endeksler gelen bilecek gelmez bu kez daha kontrol DeletedDate için kümelenmiş bir dizin arama zorunda kalmazsınız, DeletedDate üzerinde sorgu filtrelerinizi tatmin
  • Tüm NC dizinleri boyut olarak% 10-15 daha küçük olacak ve daha az bellek ve daha az G / Ç işlemi gerektirecektir.

Ticaret kapalı olmasıdır herhangi Soft sonra bakışlar satır sildi Sorgu (satırlar var do aksi niçin ve bazı sorgu olmak zorunda?) Bu NC dizinleri kullanmayı mümkün olmayacaktır.


7

Eğer varsa DAİMA kullanmak DeletedDate IS NULLSorgularınızdaki filtreyi, o zaman evet büyük olasılıkla filtre ekleyerek önemli bir performans artışı göreceksiniz.

İlgili satırları bulmak için motorun kontrol etmesi çok daha az sayfa demektir, bu da daha az IO (ve daha fazla hız) anlamına gelir.

Bir INCLUDEDalan olarak eklemek işe yaramaz . Her zaman filtreye eklediğiniz için (ancak muhtemelen bunu asla SEÇİM listesine eklemediğinizden), bir alan olarak eklerseniz bu alana asla başvurulmaz INCLUDE.


2

Satırların% 85-90'ının DeletedDate'i NULL olduğundan, yalnızca DeletedDate'i içeren bir dizinin seçiciliğinin SQL'in bu dizini kullanması yeterli olmayacaktır. Bununla birlikte, diğer daha seçici sütunlarla birlikte kullanıldığında, varolan dizinlere DeletedDate eklemek, dizinin genel seçiciliğini arttırırsa bir miktar fayda sağlayacaktır.

JNK'nin dediği gibi, SELECT yan tümcesinde kullanmadığınız sürece DeletedDate dizinleri kaplamada çok az işe yarayacaktır.

Dizinler için verilerden daha fazla depolama alanı olduğu göz önüne alındığında, mevcut 15 NC dizinlerinde herhangi bir artıklık olup olmadığını da görmek isteyebilirsiniz.

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.