Kümelendirilmemiş dizin boyutunu tahmin etmek
Kümelendirilmemiş dizin depolamak için gereken alanı tahmin etmek için aşağıdaki adımları izleyin:
2 Ve 3 numaralı adımları kullanmak için değişkenler hesaplayın.
Kümelendirilmemiş dizin yaprak düzeyini dizin bilgilerini depolamak için kullanılan alanı hesaplayın.
Kümelendirilmemiş dizin yaprak olmayan düzeyleri dizin bilgilerini depolamak için kullanılan alanı hesaplayın.
Hesaplanan değerlerin toplam.
Adım 1.2 Ve 3 numaralı adımları kullanmak için değişkenler hesaplayın
Dizinin üst düzeyleri depolamak için gereken alanı tahmin etmek için kullanılan değişkenler hesaplamak için aşağıdaki adımları kullanabilirsiniz.
Tabloda mevcut olacaktır satır sayısını belirtin:
Num_Rows = tablosu içinde satır sayısı
Kendi depolama için gereken alanı hesaplamak ve dizin anahtar Sabit uzunluk ve değişken uzunlukta sütun sayısını belirtin:
Dizin anahtar sütunları Sabit uzunluk ve değişken uzunlukta sütun içerebilir. İç düzey dizin satır boyutunu tahmin etmek için alanı hesaplamak her sütun bu grupların içinde dizin satır kaplar. Bir sütun veri türü ve uzunluğu belirtimine bağlıdır. Daha fazla bilgi için, bkz. Data Types (Database Engine).
Num_Key_Cols = anahtar sütunları (Sabit uzunluk ve değişken uzunlukta) toplam sayısı
Fixed_Key_Size = toplam bayt sayısını tüm sabit uzunlukta anahtar sütunlar
Num_Variable_Key_Cols = değişken uzunlukta anahtar sütun sayısı
Max_Var_Key_Size tüm değişken uzunlukta anahtar sütunlarının azami bayt =
Dizin benzer ise gerekli olan veri satır Konumlandırıcı hesabı:
Kümelendirilmemiş dizin benzer ise, veri satır Konumlandırıcı her satır için benzersiz bir anahtar değeri üretmek için kümelendirilmemiş dizin anahtarı ile birleştirilir.
Kümelendirilmemiş dizin üzerinde bir yığın ise, veri satır Konumlandırıcı öbek RID olur. Bu bir 8 bayt boyutudur.
Num_Key_Cols = Num_Key_Cols + 1
Num_Variable_Key_Cols = Num_Variable_Key_Cols + 1
Max_Var_Key_Size = Max_Var_Key_Size + 8
Kümelendirilmemiş dizin kümelenmiş bir dizin üzerinde ise, veri satır Konumlandırıcı kümeleme anahtarıdır. Kümelendirilmemiş dizin anahtarı ile kombine edilebilir sütun zaten kümelendirilmemiş dizin anahtar sütunları kümesi içinde mevcut olmayan bu kümeleme anahtar sütunlar vardır.
Num_Key_Cols = Num_Key_Cols + Kümelenmiş dizin benzer ise anahtar sütunları kümelendirilmemiş dizin anahtar sütunları (+ 1) kümesinde olmayan küme sayısı
Fixed_Key_Size = Fixed_Key_Size + toplam bayt boyutu sabit uzunlukta anahtar sütunları kümelendirilmemiş dizin anahtar sütunları kümesi içinde olmayan kümeleme
Num_Variable_Key_Cols = Num_Variable_Key_Cols + değişken uzunlukta anahtar sütunları kümelendirilmemiş dizin anahtar sütunları (+ 1) kümesinde olmayan Kümelenmiş dizin benzer ise küme sayısı
Max_Var_Key_Size = Max_Var_Key_Size + azami bayt sayısını değişken uzunluklu Kümelenmiş dizin benzer ise anahtar sütunları kümelendirilmemiş dizin anahtar sütunları (+ 4) kümesinde olmayan kümeleme
Bölümü boş bitmap olarak bilinen satır, Sütun nullability yönetmek için ayrılmış olabilir. Boyutu Hesapla:
Dizin anahtar NULL olabilecek sütunları varsa, adım 3'te açıklandığı gibi gerekli tüm kümeleme anahtar sütunları da dahil olmak üzere dizin satır parçası boş bitmap için ayrılmıştır.
Index_Null_Bitmap = 2 + ((dizin satır + 7 sütun sayısı) / 8)
Yalnızca tamsayı bölümünü önceki kullanılmalıdır. Herhangi bir geri kalanı atın.
NULL olabilecek hiçbir anahtar sütun varsa, set Index_Null_Bitmap 0.
Değişken uzunlukta veri boyutu Hesapla:
Değişken uzunlukta varsa tüm gerekli Kümelenmiş dizin anahtar sütunları da dahil olmak üzere dizin anahtar sütunları dizin satır içinde sütun depolamak için kullanılan alan miktarını belirleyin:
Variable_Key_Size* = 2 + (Num_Variable_Key_Cols x 2) + *Max_Var_Key_Size
Eklenen bayt ***Max\_Var\_Key\_Size*** her değişken sütun izlemek için vardır.Bu formül, tüm değişken uzunlukta sütun yüzde 100 dolu olduğunu varsayar. Değişken uzunlukta sütun depolama alanı küçük bir yüzdesi kullanılacak öngörüyorsanız, ayarlayabileceğiniz ***Max\_Var\_Key\_Size*** toplam tablo boyutunun daha doğru bir tahmin verimi yüzde değeri.
Hiçbir değişken uzunlukta sütun varsa, set ***Variable\_Key\_Size*** 0.
Dizin satır boyutunu hesaplamak:
Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap (için bir dizin satır satır üstbilgi yükü) 1 + 6 (çocuk sayfa numarası işaretçisi)
Sayfa (sayfa başına 8096 boş bayt sayısı) başına dizin satır sayısını hesaplayın:
Index_Rows_Per_Page 8096 = / (Index_Row_Size + 2)
Dizin satır sayfalara yayılan değil çünkü dizin satır başına sayfa sayısı yakın bütün satır yuvarlanmasını. Sayfanın yuvası dizideki satır'ın giriş için 2 formül olduğunu.
Adım 2.Yaprak düzeyi deposu dizin bilgileri için kullanılan alanı hesaplayın
Yaprak düzeyi dizin depolamak için gereken alanı tahmin etmek için aşağıdaki adımları kullanabilirsiniz. Bu adımı tamamlamak için adım 1 ' korunmuş değerleri gerekir.
Kendi depolama için gereken alanı hesaplamak ve yaprak düzeyinde Sabit uzunluk ve değişken uzunlukta sütun sayısını belirtin:
[!NOT]
Kümelendirilmemiş dizin dizin anahtar sütunları ek olarak nonkey sütunlar ekleyerek genişletebilirsiniz. Bu ek sütunlar yalnızca kümelendirilmemiş dizin yaprak düzeyinde depolanır. Daha fazla bilgi için, bkz. NIB - Create Indexes with Included Columns.
[!NOT]
Bu birleştirebilirsiniz varchar, nvarchar, varbinary, ya sql_variant8,060 bayt aşan toplam tanımlanan tablo genişliği neden sütun. Bu sütunların her birinin uzunluğu hala sınırı için 8.000 bayt aralığı içinde olmalıdır bir varchar, varbinary, ya sql_variantsütunu ve 4.000 bayt nvarcharsütun. Ancak, bunların kombine genişlikleri Tablo 8,060 bayt sınırını aşıyor olabilir. Bu sütunlar dahil kümelendirilmemiş dizin yaprak satırlar için de geçerlidir. Daha fazla bilgi için, bkz. Row-Overflow Data Exceeding 8 KB.
Kümelendirilmemiş dizin dahil herhangi bir sütun varsa, adım 1, adım 3'te belirlenen tüm değişiklikler de dahil olmak üzere değerleri kullanın:
Num_Leaf_Cols* = *Num_Key_Cols
Fixed_Leaf_Size* = *Fixed_Key_Size
Num_Variable_Leaf_Cols* = *Num_Variable_Key_Cols
Max_Var_Leaf_Size* = *Max_Var_Key_Size
Dahil sütunları kümelendirilmemiş dizin varsa, uygun değerleri adım 1, adım 3'te değişiklikler dahil olmak üzere değerleri ekleyin. Bir sütun veri türü ve uzunluğu belirtimine bağlıdır. Daha fazla bilgi için, bkz. [Data Types (Database Engine)](https://msdn.microsoft.com/tr-tr/library/ms187594\(v=sql.110\)).
***Num\_Leaf\_Cols*** = ***Num\_Key\_Cols*** + dahil sütun sayısı
***Fixed\_Leaf\_Size*** = ***Fixed\_Key\_Size*** + toplam bayt sayısını sabit uzunluklu sütunları dahil
***Num\_Variable\_Leaf\_Cols*** = ***Num\_Variable\_Key\_Cols*** + değişken sayısı dahil sütunlar
***Max\_Var\_Leaf\_Size*** = ***Max\_Var\_Key\_Size*** + azami bayt sayısını değişken uzunlukta sütun dahil
Veri satır Konumlandırıcı hesabı:
Kümelendirilmemiş dizin benzer ise, veri satır Konumlandırıcı yükünü zaten adım 3'te kabul ve hiçbir ek değişiklikler gereklidir. Sonraki adıma geçin.
Kümelendirilmemiş dizin benzersiz ise, veri satır Konumlandırıcı yaprak düzeyinde tüm satırlarda oluşturuyor gerekir.
Kümelendirilmemiş dizin üzerinde bir yığın ise, veri satır Konumlandırıcı öbek RID (boyutu 8 bayt) ' dir.
Num_Leaf_Cols = Num_Leaf_Cols + 1
Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + 1
Max_Var_Leaf_Size = Max_Var_Leaf_Size + 8
Kümelendirilmemiş dizin kümelenmiş bir dizin üzerinde ise, veri satır Konumlandırıcı kümeleme anahtarıdır. Kümelendirilmemiş dizin anahtarı ile kombine edilebilir sütun zaten kümelendirilmemiş dizin anahtar sütunları kümesi içinde mevcut olmayan bu kümeleme anahtar sütunlar vardır.
Num_Leaf_Cols = Num_Leaf_Cols + Kümelenmiş dizin benzer ise anahtar sütunları kümelendirilmemiş dizin anahtar sütunları (+ 1) kümesinde olmayan küme sayısı
Fixed_Leaf_Size = Fixed_Leaf_Size + Sabit uzunluk anahtar sütunları kümelendirilmemiş dizin anahtar sütunları kümesi içinde olmayan küme sayısı
Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + değişken uzunlukta anahtar sütunları kümelendirilmemiş dizin anahtar sütunları (+ 1) kümesinde olmayan Kümelenmiş dizin benzer ise küme sayısı
Max_Var_Leaf_Size = Max_Var_Leaf_Size + boyutunu bayt cinsinden değişken uzunluklu Kümelenmiş dizin benzer ise anahtar sütunları kümelendirilmemiş dizin anahtar sütunları (+ 4) kümesinde olmayan kümeleme
Boş bitmap boyutunu Hesapla:
Leaf_Null_Bitmap = 2 + ((Num_Leaf_Cols + 7) / 8)
Yalnızca tamsayı bölümünü önceki kullanılmalıdır. Herhangi bir geri kalanı atın.
Değişken uzunlukta veri boyutu Hesapla:
Dizin anahtar değişken uzunlukta sütun varsa, adım 2'de, daha önce açıklandığı gibi gerekli tüm kümeleme anahtar sütunları da dahil olmak üzere dizin satır içinde sütun depolamak için kullanılan alan miktarını belirleyin:
Variable_Leaf_Size* = 2 + (Num_Variable_Leaf_Cols x 2) + *Max_Var_Leaf_Size
Eklenen bayt ***Max\_Var\_Key\_Size*** her değişken sütun izlemek için vardır.Bu formül, tüm değişken uzunlukta sütun yüzde 100 dolu olduğunu varsayar. Değişken uzunlukta sütun depolama alanı küçük bir yüzdesi kullanılacak öngörüyorsanız, ayarlayabileceğiniz ***Max\_Var\_Leaf\_Size*** toplam tablo boyutunun daha doğru bir tahmin verimi yüzde değeri.
Hiçbir değişken uzunlukta sütun varsa, set ***Variable\_Leaf\_Size*** 0.
Dizin satır boyutunu hesaplamak:
Leaf_Row_Size = Fixed_Leaf_Size + Variable_Leaf_Size + Leaf_Null_Bitmap (için bir dizin satır satır üstbilgi yükü) 1 + 6 (çocuk sayfa numarası işaretçisi)
Sayfa (sayfa başına 8096 boş bayt sayısı) başına dizin satır sayısını hesaplayın:
Leaf_Rows_Per_Page 8096 = / (Leaf_Row_Size + 2)
Dizin satır sayfalara yayılan değil çünkü dizin satır başına sayfa sayısı yakın bütün satır yuvarlanmasını. Sayfanın yuvası dizideki satır'ın giriş için 2 formül olduğunu.
Temel sayfa başına ayrılan boş satır sayısını hesaplamak dolgu etmeni belirtilen:
Free_Rows_Per_Page 8096 x ((100- Fill_Factor) = 100) / (Leaf_Row_Size + 2)
Hesaplamada kullanılan dolgu etmeni, yüzde yerine bir tamsayı değeridir. Satır sayfalara yayılan değil çünkü, sayfa başına satır sayısı yakın bütün satır yuvarlanmasını. Dolgu etmeni büyüdükçe, her sayfada daha fazla veri saklanır ve orada-ecek var olmak daha az sayfa. Sayfanın yuvası dizideki satır'ın giriş için 2 formül olduğunu.
Tüm satırlar depolamak için gereken sayfaların sayısını hesaplayın:
Num_Leaf_Pages = Num_Rows / (Leaf_Rows_Per_Page - Free_Rows_Per_Page)
Tahmini sayfa sayısı için en yakın tam sayfa yuvarlanmış.
(Sayfa başına 8192 toplam bayt sayısı) dizin boyutunu hesaplamak:
Leaf_Space_UsedIndex_Space_used* = 8192 x *Num_Leaf_Pages
Adım 3.Yaprak olmayan düzeyde deposu dizin bilgisi için kullanılan alanı hesaplayın
Orta depolamak ve kök dizinin düzeyleri için gereken alanı tahmin etmek için aşağıdaki adımları izleyin. Adım 2 ve 3 bu adımı tamamlamak için korunmuş değerleri gerekir.
Yaprak olmayan düzey dizin sayısını hesaplayın:
Yaprak olmayan düzeyleri = 1 + günlük Index_Rows_Per_Page (Num_Leaf_Pages / Index_Rows_Per_Page)
Yuvarlak bu değere en yakın tam sayıya yukarı. Bu değer, kümelendirilmemiş dizin yaprak düzeyini içermez.
Yaprak olmayan sayfa dizin sayısını hesaplayın:
Num_Index_Pages* ∑ =düzeyi (Num_Leaf_Pages/Index_Rows_Per_PageLevel) 1 yerlerde <Level = <= *düzeyleri
Yuvarlak olan en yakın tam sayıya kadar her summand. Basit bir örnek dizin düşünün nerede ***Num\_Leaf\_Pages*** = 1000 ve ***Index\_Rows\_Per\_Page*** = 25. Yaprak sayfa başına bir dizin satır ise, 1000 dizin satırları ilk dizin düzeyi yukarıda yaprak düzeyi saklar ve 25 dizin satır her sayfa için uygun olabilir. Buna göre 40 sayfalarını 1000 Index satırlar depolamak için gereklidir. 40 Satır depolamak dizinin sonraki seviyeye sahiptir. Bu, o 2 sayfa istemek anlamına gelir. 2 Satır depolamak dizinin son düzeyi vardır. Buna göre 1 sayfa gerektirir. Bu 43 yaprak olmayan dizin sayfaları verir. Bu rakamlar önceki formüllerde kullanıldığında sonuç aşağıdaki gibidir:
***Sigara-leaf\_Levels*** = 1 + günlük25 (1000 / 25) = 3
***Num\_Index\_Pages*** 1000 /(253) + = 1000 / (252) + 1000 / (251) = 1 + 2 + 40 = hangi örneğinde açıklanan sayfa sayısı 43,.
- (Sayfa başına 8192 toplam bayt sayısı) dizin boyutunu hesaplamak:
Index_Space_used* = 8192 x *Num_Index_Pages
Adım 4.Hesaplanan değerlerin toplam
Önceki iki adımı elde edilen değerlerin toplam:
Kümelendirilmemiş dizin boyutu (bayt) = Leaf_Space_UsedIndex_Space_used + Index_Space_used
Bu hesaplama, aşağıdakileri dikkate almaz:
Bölümleme
Bölümleme gelen yükü en az, ama karmaşık hesaplamak için alandır. İçerecek şekilde önemli değildir.
Ayırma sayfaları
Bir yığın için ayrılan sayfaları izlemek için kullanılan en az bir IAM sayfa ama Uzay yükü azdır ve deterministically kaç IAM sayfaları tam olarak kullanılacak hesaplamak için hiçbir algoritması mevcuttur.
Büyük nesne (lob) değerleri
lob veri türlerini depolamak için alan miktarını tam olarak kullanılacağını belirlemek için algoritma varchar(max), varbinary(max), nvarchar(max), text, ntext, xml, ve imagedeğerleri karmaşık. Just lob değerleri beklenen ortalama boyutu eklemek için çarpmak yeterlidir Num_Rowsve toplam kümelendirilmemiş dizin boyutu eklemek.
Sıkıştırma
Sıkıştırılmış bir dizin boyutu pre-calculate olamaz.
Seyrek sütunlar
Seyrek sütun alanı gereksinimleri hakkında daha fazla bilgi için bkz: Seyrek sütunlar kullanma.
Ayrıca bkz.
Kavramlar
Kümelenmiş bir dizin boyutunu tahmin etmek
Bir yığın boyutunu tahmin etmek
Diğer Kaynaklar
Clustered Index Design Guidelines
Creating Indexes (Database Engine)