2016-03-31 23 views
1

için tercih Endeksi Özellikleri/Nitelikler Ben bölümleme için aday tabloları aramak için bir komut dosyası oluşturulur ve dizin bilgileri kullanarak ettik, ben bölme ideal sütununu bulmak istiyorum. En çok sorgulanan sütunları (şimdilik) görmezden geliyorum. Aşağıda, kümelenmiş dizinlerin parçası olan sütunlara öncelik veren temel bir sorgu var ve daha sonra bunların birincil anahtar olup olmadığı. onlar iyi bölümleme sütun olup olmadığını SQL Server: Bölme Sütun

yüzden de belirlemek için içerebilen endeksli sütunun en iyi kriterleri/niteliklerdir bu kuşkusuz kaba bir yaklaşım kullanılarak? Bu nitelikler için akıl yürütme de sağlayabilirseniz lütfen.

Eğer bu yaklaşıma tamamen katılmıyorsanız, bu iyi, lütfen yorum yapın, ancak bunun en iyi uygulamalara başvurmadan önce bölümlendirme sonucunun ön analizi için olduğunu unutmayın.

;WITH cte AS 
(
    SELECT 
     t.name AS TableName, ind.name AS IndexName, 
     ind.type_desc AS TypeDesc, col.name AS ColumnName, 
     st.name AS DataType, ind.is_unique AS IsUnique, 
     ind.is_primary_key AS IsPrimaryKey, 
     ind.is_unique_constraint AS IsUniqueCons, 
     ROW_NUMBER() OVER (PARTITION BY t.name 
          ORDER BY 
           CASE WHEN ind.type_desc = 'CLUSTERED' THEN 1 ELSE 2 END, 
           CASE WHEN ind.is_primary_key = 1 THEN 1 ELSE 2 END) AS row_num 
    FROM 
     sys.indexes ind 
    INNER JOIN 
     sys.index_columns ic ON ind.object_id = ic.object_id 
          AND ind.index_id = ic.index_id 
    INNER JOIN 
     sys.columns col ON ic.object_id = col.object_id 
         AND ic.column_id = col.column_id 
    INNER JOIN 
     sys.tables t ON ind.object_id = t.object_id 
    INNER JOIN 
     sys.types st ON col.system_type_id = st.system_type_id 
    WHERE 
     t.is_ms_shipped = 0 
     AND st.name IN ('datetime', 'smalldatetime') 
) 
SELECT * 
FROM cte 
WHERE row_num = 1 

cevap

0

Yalnızca iyi şema sütunlarını şemadan algılayamazsınız. Çoğunlukla iş yüküne bağlıdır.

Bölümleme sorguları hızlı gitmek yapmak için değil olduğunu. Bunu yapabilir, ancak normal indekslemeden genellikle daha düşüktür. Çoğu zaman, bölümleme sorguları daha yavaş hale getirir. Sorgu bölümleme şemasına uymalıdır.

Bölümleme silip sabit zamanda bölümleri ekleyebilir ve farklı depolama (farklı işlem hacmi ve farklı yedekleme takvimi) üzerine farklı verileri koymak muktedir olduğunu.

Ben yaklaşımınız asla iş düşünüyorum. Bunu atmalısın.

+0

yaklaşım benim durumumda oldukça iyi. Dediğim gibi, şimdilik sadece bir bölümleme senaryosunda metrikler almaya çalışıyorum (sol/sağ toplamlar vb.) Kümelenmiş dizinler genellikle bölümlemeye karar verirsek bölümleme yapacağımız tarih alanlarını içerir. bu masa. Fakat bir şey yapmadan önce, farklı tarihlerle metrikler istiyorum ve kayıt sayıları, toplam boyut vb. Ile belirli tabloları dahil veya hariç tutuyorum, bu yüzden bu yaklaşım şu ana kadar gayet iyi çalışıyor. Ve sorguların çoğu dizinlere bağlı kalmalıdır. Bu tablolar çok büyük, olmasaydı şaşırırdım. – John

+0

Aradığınız kriterleri sordunuz. Cevabım: Hiçbiri yok. Bunun, belirttiğim nedenlerden dolayı doğru olduğunu göreceksiniz. 'yalnızca iyi bölümleme sütunları olup olmadığını belirleyin 'Yalnızca şema bilgilerini kullanarak imkansız. Yaklaşımınız mahkum. Bu cevap, bu nedenle sorduğunuz soruyu çözer. – usr