Sütun Deposu Dizinleri

Columnstore dizinler grup ve her sütun için veri saklamak ve tüm dizin tamamlamak için tüm sütunları katılın. Bu grup ve her satır veri depolamak ve tüm dizin tamamlamak için tüm satırları katılmak geleneksel dizinler farklıdır. Sorgu, bazı türleri için SQL Serversorgu işlemci yararlanabilir sorgu yürütme süreleri önemli ölçüde geliştirmek için columnstore düzeni. BI uygulamaları, karar destek ve veri ambarı patlayıcı büyüme okuyup çok büyük veri kümelerini hızlı ve doğru şekilde yararlı bilgi ve bilgi işlemek için bir aciliyet üretti. Bu büyüme veri birimlerini ve tırmanan beklentilerini korumak veya artımlı performans artışı geliştirmek için zor. SQL Servercolumnstore dizin teknoloji tipik veri veri depolama için özellikle uygundur. Columnstore dizinler veri toplayarak filtre uygulama, gruplama gibi genel veri ambarlama sorgular ve yıldız birleşim sorguları için daha hızlı bir performans sağlayarak kullanıcıların deneyimini depolama dönüştürebilirsiniz.

İçindekiler

Temelleri

  • Temel: Açıklanan Columnstore dizinler

  • Temel: Columnstore dizin kısıtlamaları ve sınırlamaları

  • Gösteri örnek: Columnstore dizinler bölümlenmiş bir tablo ile

  • Temel: Tipik Columnstore Index senaryoları

  • Temel: Bit eşlem filtre iyileştirmeleri

En İyi Yöntemler

  • En iyi uygulamalar: Columnstore dizin veri güncelleştirme

  • En iyi uygulamalar: Bir sütun deposu dizin sütunları seçme

  • En iyi uygulamalar: Bölümlenmiş tablolar

Nasıl Yapılır

  • Nasıl yapılır: bir sütun deposu dizin oluşturma

  • Nasıl yapılır: bir Columnstore dizin boyutunu belirleme

  • Nasıl yapılır: bir sütun deposu dizin performansı sorunlarını giderme.

Temel: Açıklanan Columnstore dizinler

Columnstore dizinler SQL Server Veritabanı Altyapısıortak veri sorguları ambarı işlem süresi önemli ölçüde faturalamak için kullanılabilir. Tipik veri depolama iş yükleri, büyük miktarda veriyi özetleyen içerir. Genellikle performansı artırmak için veri depolama ve karar destek sistemlerinde kullanılan teknikler pre-computed Özet Tablo, dizin oluşturulmuş görünümler, olap küpleri ve benzerleri vardır. Bunlar büyük ölçüde sorgu işleme kadar hızlandırabilir, ancak bu teknikleri olabilir esnek, korumak zor ve her sorgu sorun için özel olarak tasarlanmış olması gerekir.

Örneğin, boyut anahtar sütunları dk1 ve dk2 ile bilgi tablosundaki F1 düşünün. m toplamı gibi bir toplama işlevi olabilir bildirin. Sütun dk1 M(dk1) için başvuran bir sorgu, her çalıştırıldığında F2 Özet Tablo üzerinde m (dk1, m) hesaplamak yerine oluşturulabilir ve sonuç-ebilmek var olmak pre-computed ve sorgu daha hızlı şekilde kullanılır. Ancak, yeni bir sorgu M(dk2) için başvuran gerekiyorsa, yeni bir Özet Tablo F3 (dk2, m) bu bilgilerin oluşturulması gerekiyor. Ne zaman bir tablodaki sütun sayısı artar ve birçok olası işlevleri, bu yaklaşım sürdürmek zorlaşır ve gerekli olan tüm sorguları kolayca kapsamaz.

Bu yükü kullanıcı için önemli olabilir. Kullanarak SQL Servercolumnstore dizinler, kullanıcıların diğer çözümleri yükünü azaltabilir. Columnstore dizinler de bu pre-computation gerekli değildir bu yüzden sonuçları hızlı bir şekilde hesaplamak için sorguları sağlar.

Anahtar özellikleri SQL Serversütun depolama teknolojisi aşağıdaki gibidir:

  • Sütun veri biçimi -veri göre geleneksel satır organizasyon aksine (denilen rowstore biçimi), sütunlu veritabanı sistemleri gibi SQL Servercolumnstore dizinler, veriler gruplandırılır ve bir defada bir sütun depolanan. SQL Serversorgu işleme, yeni veri düzenini yararlanmak ve sorgu yürütme süresi önemli ölçüde geliştirmek.

  • Daha hızlı sorgu sonuçlarını -Columnstore dizinler, aşağıdaki nedenlerden dolayı daha hızlı sonuçlar üretebilir:

    • Yalnızca gerekli sütunları okumak gerekir. Bu nedenle, daha az veri diskten belleğe okumak ve daha sonra bellekten işlemci önbelleği için taşındı.

    • Sütunları ağır sıkıştırılır. Bu okumak ve taşınan olmalıdır bayt sayısını azaltır.

    • Sorguların çoğu tüm sütunlar tablonun dokunmayın. Bu nedenle, birçok sütun asla belleğe getirilir. Bu, iyi sıkıştırma ile birlikte toplam I/O azaltır arabellek havuzu kullanımını artırır.

    • Gelişmiş sorgu yürütme teknolojisi işler adlı sütunları parçalarını toplu cpu kullanımını azaltarak akıcı bir şekilde.

  • Anahtar sütunlar -orada bir columnstore dizin anahtar sütunları kavramı (16) dizinde anahtar sütun sayısını sınırlama columnstore dizinler için geçerli değildir.

  • Kümelenmiş dizin anahtarı – temel tablo kümelenmiş bir dizin varsa, küme anahtarı tüm sütunları kümelendirilmemiş columnstore dizininde bulunmalıdır. Kümeleme anahtar sütun create INDEX deyimi içinde listelenmemişse, columnstore dizinini otomatik olarak eklenir.

  • Bölümleme -Columnstore dizinler bölümleme tablosu ile çalışır. Sözdizimi bölümleme tablosu değişiklik gereklidir. Columnstore dizin bölümlenmiş bir tablo ile temel tablo bölümleme hizalanmış olmalıdır. Bu nedenle bölümleme sütununda columnstore dizin içinde sütunlar ise bir kümelendirilmemiş columnstore dizini yalnızca bölümlenmiş bir tablo oluşturulabilir.

  • Kayıt boyutu -900 bayt dizin anahtar boyutu kayıt sınırlaması da columnstore dizinler için geçerli değildir.

  • Sorgu işleme -columnstore Index ile birlikte SQL Serververileri sütun yönünü yararlanmak için toplu işleme tanıttı. Columnstore yapısı ve toplu işleme hem performans artışı için katkıda bulunmak, ama eğer sadece bir faktör ilgili performans konuları araştıran daha karmaşık olabilir.

  • Tablo updated - SQL Server 2012, columnstore dizinine sahip bir tablo güncelleştirilemez. Görmek için geçici çözümler, en iyi uygulamalar: Columnstore dizin verileri güncelleştirmek

Columnstore dizin oluşturma sözdizimi için bkz: columnstore Index (Transact-sql) oluştur.

Columnstore dizinler nasıl depolandığı hakkında daha fazla bilgi için bkz: Columnstore Index Structures.

Veri Türleri

Ortak iş veri türlerini bir columnstore dizini dahil edilebilir. Aşağıdaki veri türleri bir columnstore dizini dahil edilebilir.

  • char ve varchar

  • ncharand nvarchar (except varchar(max) and nvarchar(max))

  • decimal(ve numeric) (18 Basamak büyük bir hassasiyetle hariç.)

  • int, bigint, smallint, and tinyint

  • float(vereal)

  • bit

  • money ve smallmoney

  • Tüm tarih ve Saat veri türleri (dışında datetimeoffset2'den büyük ölçekli)

Aşağıdaki veri türlerini columnstore dizininde yer alamaz:

  • binary ve varbinary

  • ntext, text, and image

  • varchar(max) ve nvarchar(max)

  • uniqueidentifier

  • rowversion(vetimestamp)

  • sql_variant

  • decimal(ve numeric) 18 basamak büyük bir hassasiyetle

  • datetimeoffsetÖlçek ile 2'den büyük

  • clr türleri ( hierarchyid ve kayma türleri)

  • xml

Kötü performans potansiyeli

Karar destek sorgu performansı genellikle columnstore dizinler üzerinde büyük tablolarda kullanılır, ancak bazı sorgular ve hatta bütün iş yükleri daha kötü performans artırıldı. Maliyet dayalı bir yaklaşım kullanarak, sorgu en iyi duruma getiricisi genellikle yalnızca sorgu genel performansını artırır, columnstore dizin kullanılacak karar. Ancak, doktoru kullanır maliyet modelleri yaklaşık değerlerdir ve bazen bir satır mağaza (b-ağaç veya yığın) tablo erişmek için kullanmak daha iyi olurdu columnstore dizin tablo için kullanılacak Doktoru seçer. Bu oluşursa, IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX sorgu ipucu veya dizin İpucu Doktoru satır mağaza dizine yönlendirmek için kullanın. Doktoru, hala columnstore dizininden bazı bilgiler içerebilir. Bu nedenle, nadir durumlarda, bu seçenek performans sorunu değil. İş performansınızı columnstore dizini tarafından yardımcı değildir ve bu sorunu çözmek için dizin ipuçları kullanamazsınız, satır saklamak için işleme dönmek columnstore dizin bırakın.

Sorunlu alanları

SQL Servercolumnstore dizinler ve sütun tabanlı sorgu işleme için tipik veri depolama özelliği büyük özellik tablosu sorgu en iyi duruma getirilmiş ve bir yıldız şema yapılandırması, katıldı ve gruplandırılmış ve toplanan küçük boyut tablolarından ılımlı vardır. Özellik tablosu içinde satır sayısı çok olsa da, bu sorguları genellikle veri toplanan çünkü nispeten küçük bir sonuç döndürür. Columnstore dizini kullanarak sorguları performansını ne zaman bir yavaş olabilir veya daha aşağıdaki koşullardan biri doğruysa.

  • Sonuç kümesi büyük çünkü veri toplanan değil. (Büyük bir sonuç kümesi döndüren bir küçük sonuç kümesi döndürme daha doğal yavaştır.)

  • Orada hiçbir birleştirme, süzme veya toplama. Bu durumda hiçbir toplu işleme olduğunu. Bu nedenle, parası columnstore dizininden sıkıştırma ve daha az sütun okuma faydaları sınırlıdır.

  • İki büyük tablolar belleğe sığamaz ve diske dökmek gerekir büyük denetim tablolarını oluşturur şekilde birlikte katılması gerekir.

  • Daha alınacak columnstore dizinin neden çok sayıda sütun döndürülür.

  • Columnstore endeksli bir tabloya birleştirme koşulu birden fazla sütun içerir.

Bu nedenlerden biri oluşursa, yavaş columnstore ile işleme etrafında çalışmak için bu bölümde daha önce anlatılan yöntemleri kullanabilirsiniz.

Üst

Temel: Columnstore dizin kısıtlamaları ve sınırlamaları

Temel kısıtlamalar

Columnstore dizin:

  • Birden fazla 1024 sütun olamaz.

  • Kümelenmiş olamaz. Yalnızca dizinler kümelendirilmemiş columnstore mevcuttur.

  • Benzersiz bir dizin olamaz.

  • Bir görünüm oluşturulamıyor veya görünümü dizine.

  • Seyrek sütun içeremez.

  • Birincil anahtar veya yabancı anahtar olarak davranamaz.

  • Kullanılarak değiştirilemez ALTER INDEXdeyimi. Bırakma ve yerine columnstore dizin yeniden oluşturun. (Sen-ebilmek kullanma ALTER INDEXdevre dışı bırakabilir ve bir columnstore dizini yeniden.)

  • İle oluşturulamaz INCLUDEanahtar.

  • İçeremez ASCya DESCdizin sıralama anahtar. Columnstore dizinler sıkıştırma algoritmaları göre sıralanır. Dizinde, sıralama yapılamaz. Columnstore dizininden seçilen değerleri arama algoritması tarafından sıralanır ancak kullanmanız gerekir ORDER BYgaranti sonuç kümesini sıralamak için yan.

  • Kullanmayın veya geleneksel bir dizin bir şekilde istatistik tutmak.

Tablo columnstore dizini güncelleştirilemiyor

Bu sorunu gidermek için bkz: en iyi uygulamalar: Columnstore dizin verileri güncelleştirmek.

Sınırlı bellek etkileri

Sütun deposu işlem bellek işlenmek üzere optimize edilmiştir. SQL Serververi ve bellek yetersiz olduğunda diske dökmek için çoğu veri yapıları etkinleştirmek mekanizmaları uygular. Ciddi bellek sınırlamaları varsa, işlem satır deposunu kullanır. Columnstore dizin bir erişim yöntemi olarak seçilir ancak gerekli veri yapılarını oluşturmak bellek yetersiz örnekler olabilir. Columnstore işlem olarak başlayan ve yavaş bir kod yolu varsaymak, bazı durumlarda ciddi bellek kısıtlama karşılaşmak sorguların performans azalma olabilir. Herhangi bir sorgu etkili bellek gereksinimini belirli sorguya bağlıdır. Columnstore dizin oluşturmak için yaklaşık 8 megabayt sütun dizin (paralellik derecesi) dop kez kez gerekir.  Genellikle bellek gereksinimleri dizeleri artışlar olan sütunlar orantılı artar. Bu nedenle, dop azalan columnstore dizin oluşturmak için bellek gereksinimleri azaltabilirsiniz.

Bazı ifadelerin değerlendirilmesine diğerlerinden daha hızlanmış

Bazı ortak ifadeleri columnstore endeksi kullanıldığında tek bir satır, bir süre modu yerine bir toplu işlem modu kullanılarak değerlendirilir. Toplu iş modunda bir columnstore dizini kullanmanın avantajları ilaveten ek sorgu hızlanma sağlayacaktır. Her sorgu yürütme operatör için toplu işlem modu işleme etkindir.

Columnstore dizin arama desteklemiyor

Sorgu satır küçük bir kısmını döndürmesi beklenir, doktoru columnstore dizini seçin düşüktür (örneğin: samanlık iğne yazın sorguları). Eğer tablo ipucu FORCESEEKise kullanılan, doktoru columnstore dizin değerlendirmez.

Columnstore dizinler aşağıdaki özellikleri ile birlikte kullanılamaz:

  • Sayfa ve satır sıkıştırması ve vardecimaldepolama biçimi (bir columnstore dizini zaten farklı bir biçimde sıkıştırılır.)

  • Çoğaltma

  • Değişiklik izleme

  • Değişiklik verilerini yakalama

  • FILESTREAM

Üst

Gösteri örnek: Columnstore dizinler bölümlenmiş bir tablo ile

Bu konudaki örneklerde adında bölümlenmiş bir tablo kullanmak FactResellerSalesPtnd oluşturulan AdventureWorksDW2012 örnek veritabanı. Bölümlenmiş bir tablo içinde bir columnstore dizini sınamak için AdventureWorksDW2012 veritabanı ve bilgi tablosunun bölümlenmiş bir sürümünü oluşturmak için aşağıdaki kod yürütün.

[!NOT]

Veritabanını yüklemek nasıl örnek veritabanları ve yönergeleri hakkında daha fazla bilgi için bkz: AdventureWorks Sample Data Warehouse.

FactResellerSalesPtnd tablo oluşturma

  • Bölümlenmiş bir sürümünü oluşturmak için aşağıdaki kod yürütün FactResellerSales adlı bir tablo FactResellerSalesPtnd.

    USE AdventureWorksDW2012;
    GO
    
    CREATE PARTITION FUNCTION [ByOrderDateMonthPF](int) AS RANGE RIGHT 
    FOR VALUES (
        20050701, 20050801, 20050901, 20051001, 20051101, 20051201, 
        20060101, 20060201, 20060301, 20060401, 20060501, 20060601, 
        20060701, 20060801, 20060901, 20061001, 20061101, 20061201, 
        20070101, 20070201, 20070301, 20070401, 20070501, 20070601, 
        20070701, 20070801, 20070901, 20071001, 20071101, 20071201, 
        20080101, 20080201, 20080301, 20080401, 20080501, 20080601, 
        20080701, 20080801, 20080901, 20081001, 20081101, 20081201
    ) 
    GO
    
    CREATE PARTITION SCHEME [ByOrderDateMonthRange] 
    AS PARTITION [ByOrderDateMonthPF] 
    ALL TO ([PRIMARY]) 
    GO
    
    -- Create a partitioned version of the FactResellerSales table
    CREATE TABLE [dbo].[FactResellerSalesPtnd]( 
        [ProductKey] [int] NOT NULL, 
        [OrderDateKey] [int] NOT NULL, 
        [DueDateKey] [int] NOT NULL, 
        [ShipDateKey] [int] NOT NULL, 
        [CustomerKey] [int] NOT NULL, 
        [EmployeeKey] [int] NOT NULL, 
        [PromotionKey] [int] NOT NULL, 
        [CurrencyKey] [int] NOT NULL, 
        [SalesTerritoryKey] [int] NOT NULL, 
        [SalesOrderNumber] [nvarchar](20) NOT NULL, 
        [SalesOrderLineNumber] [tinyint] NOT NULL, 
        [RevisionNumber] [tinyint] NULL, 
        [OrderQuantity] [smallint] NULL, 
        [UnitPrice] [money] NULL, 
        [ExtendedAmount] [money] NULL, 
        [UnitPriceDiscountPct] [float] NULL, 
        [DiscountAmount] [float] NULL, 
        [ProductStandardCost] [money] NULL, 
        [TotalProductCost] [money] NULL, 
        [SalesAmount] [money] NULL, 
        [TaxAmt] [money] NULL, 
        [Freight] [money] NULL, 
        [CarrierTrackingNumber] [nvarchar](25) NULL, 
        [CustomerPONumber] [nvarchar](25) NULL,
        OrderDate [datetime] NULL,
        DueDate [datetime] NULL,
        ShipDate [datetime] NULL
    ) ON ByOrderDateMonthRange(OrderDateKey);
    GO
    
    -- Using simple or bulk logged recovery mode, and then the TABLOCK 
    -- hint on the target table of the INSERT…SELECT is a best practice
    -- because it causes minimal logging and is therefore much faster.
    ALTER DATABASE AdventureWorksDW2012 SET RECOVERY SIMPLE;
    GO
    
    -- Copy the data from the FactResellerSales into the new table
    INSERT INTO dbo.FactResellerSalesPtnd WITH(TABLOCK)
    SELECT * FROM dbo.FactResellerSales;
    GO
    
    -- Create the columnstore index
    CREATE NONCLUSTERED COLUMNSTORE INDEX [csindx_FactResellerSalesPtnd]
    ON [FactResellerSalesPtnd]
    ( 
        [ProductKey], 
        [OrderDateKey], 
        [DueDateKey], 
        [ShipDateKey], 
        [CustomerKey], 
        [EmployeeKey], 
        [PromotionKey], 
        [CurrencyKey], 
        [SalesTerritoryKey], 
        [SalesOrderNumber], 
        [SalesOrderLineNumber], 
        [RevisionNumber], 
        [OrderQuantity], 
        [UnitPrice], 
        [ExtendedAmount], 
        [UnitPriceDiscountPct], 
        [DiscountAmount], 
        [ProductStandardCost], 
        [TotalProductCost], 
        [SalesAmount], 
        [TaxAmt], 
        [Freight], 
        [CarrierTrackingNumber], 
        [CustomerPONumber], 
        [OrderDate],
        [DueDate],
        [ShipDate]
    );
    

Şimdi columnstore dizinden parası ve columnstore dizin kullanılır onaylamak bir sorgu çalıştırır.

Columnstore dizin testi

  1. CTRL + m tuşlarına basın veya sorgu Seç menüsünden Fiili yürütme planı dahil. Bu tarafından kullanılan gerçek yürütme planı grafik gösterimi açar SQL Server Management Studio.

  2. Sorgu Düzenleyicisi penceresinde aşağıdaki sorguyu yürütün.

    SELECT SalesTerritoryKey, SUM(ExtendedAmount) AS SalesByTerritory
    FROM FactResellerSalesPtnd
    GROUP BY SalesTerritoryKey;
    

    İçinde sonuçları penceresi, altında yürütme planı sekmesinde, sorgu planı kümelendirilmemiş bir dizin taramayı seçili doğrulayın csindx_FactResellerSalesPtnd dizin.

    [!NOT]

    Grafik showplan simgeleri hakkında daha fazla bilgi için bkz: Graphical Execution Plan Icons (SQL Server Management Studio).

    Üst

Temel: Tipik Columnstore Index senaryoları

Star ve kar tanesi veritabanı şeması genellikle inç boyutlu veri ambarlar ve veri marts veriler alma hızı daha veri manipülasyon verimliliği önemli olduğu bulundu. Sütun depolama teknolojisinde SQL Server 2012algılayabilir ve hız sorgular hedefleme star ve parça şemaları.

Örnekler:

[!NOT]

Tabloları yeterince büyük olmadığı için toplu işleme aşağıdaki örneklerde kullanılmayabilir. Toplu iş yürütme modu, paralel işleme gibi sadece daha pahalı sorgular için kullanılır.

a: bir toplama sorgusu iki tabloları birleştirme

  • Hesaplayan bir yıldız birleştirme sorgu ürün biz satılan her üç 215 kaç düşünün. Adlandırılmış özellik tablosu FactResellerSalesPtnd üzerindeki bölümlere OrderDateKey sütun. Adlandırılmış boyut tablolarından birini DimDate birincil anahtar – yabancı üzerinden bilgi tablosundaki bağlantı anahtar ilişki tarihi anahtar.

    SELECT d.CalendarYear,
        d.CalendarQuarter,
        COUNT(*) AS NumberSold
    FROM dbo.FactResellerSalesPtnd AS f
        JOIN dbo.DimDate AS d
        ON f.OrderDateKey = d.DateKey
    WHERE ProductKey = 215
    GROUP BY d.CalendarYear, d.CalendarQuarter
    ORDER BY d.CalendarYear, d.CalendarQuarter;
    

Ayrıca, yalnızca tek bir tablo hedefleyebilir sorguları olacaktır. Bu gibi durumlarda SQL Servergücü sütun ve toplu iş yürütme yararlanmak için çalışır mağaza sorgu yürütme kadar da hızlandırmak için teknoloji.

b: tek bir tabloda basit bir toplama sorgusu

  • Aslında masa FactResellerSalesPtnd ve bu tablo üzerinde bölümlere OrderDateKey sütun. Aşağıdaki sorgu satır sayısını ve siparişlerin sayısını döndürür.

    SELECT COUNT(*) AS NumberOfRows, 
        COUNT(DISTINCT(f.SalesOrderNumber)) AS NumberOfOrders
    FROM dbo.FactResellerSalesPtnd AS f;
    

    Tipik veri depolama senaryo sorgular için artış hızı arasındaki 1,5 katı ve 10 kez tipik sorgu yürütme sırasında columnstore dizinler ve toplu iş yürütme modunda kullanıldığında. Bazı Yıldız birleştirme sorguları için hız çok daha büyüktür.

Temel: Bit eşlem filtre iyileştirmeleri

Sütun biçiminde veri düzeni ek olarak SQL Serverkullandığı bit eşlem filtreleri sorgu yürütme sırasında performansı arttırmak için depolama motoru geçti. Bit eşlem filtreleri, tüm birleşimler uygulanan önce dahil, satır sayısını azaltmak ve bu nedenle birleşim operatörü tarafından işlenen satır sayısı azaltarak sorgu yürütme hızını artırır. Bitmap karma birleştirme oluşturma tarafında oluşturulur, ancak karma birleştirme soruşturma tarafında gerçek bit eşlem denetimleri gerçekleştirilmez. Grafik veya xml yürütme planı, kullanarak bitmap filtreleri kullanımını gözlemleyebilirsiniz.

En iyi uygulamalar: Columnstore dizin veri güncelleştirme

Columnstore dizin sahip tablolar güncelleştirilemez. Bu sorunu çözmek için üç yolu vardır.

  • Bir tablo ile bir columnstore dizini güncelleştirmek için columnstore dizini bırakma, gerekli gerçekleştirmek INSERT, DELETE, UPDATE, ya MERGEişlemleri ve sonra yeniden columnstore endeksi.

  • Tablo ve anahtar bölümler bölüm. Bir toplu ekleme, hazırlama bir tabloya veri eklemek, hazırlama bir tablo üzerinde bir columnstore dizini oluşturun ve ardından hazırlama bir tablo boş bir bölüme geçin. Diğer güncelleştirmeleri için bir bölüm ana tablonun dışına hazırlama bir tablo, devre dışı veya columnstore dizin hazırlama Tablo bırakma, güncelleştirme işlemlerini gerçekleştirmek, yeniden veya hazırlama bir tablo columnstore dizini yeniden oluşturmak ve hazırlama bir tablo ana tablonun açın.

  • Columnstore dizini Ana Tablo statik veri yerleştirin ve yeni verileri ve son verileri olası değişme, bir columnstore dizini yok aynı şema ile ayrı bir tabloya yerleştirin. Güncelleştirmeler, en son verilerle tablo uygulanır. Ayarlar veri sorgulama, her tablo karşı iki sorgu olarak sorguyu yeniden yazın ve sonra iki sonuç birleştirmek ile UNION ALL. Sorgu karşı büyük ana tablonun columnstore dizinden yararlanacaktır. Güncelleştirilebilir tablo çok küçükse, columnstore dizini eksikliği performansı üzerinde daha az etkili olacaktır. Ayrıca, görünüm sorgulamak mümkün olsa UNION ALLiki tablo, NET performans avantajı göremeyebilirsiniz. Performans, sorgu, veri, önem düzeyi tahminleri bağlıdır sorgu planı bağlıdır. Bir görünümü kullanmanın avantajı olan bir INSTEAD OFGörünümü tetikleyici aktarma güncelleştirmeleri bir columnstore dizini olmayan tablo ve Görünüm mekanizması ve uygulamalar kullanıcı için saydam olacağını. Bu yaklaşımları ile herhangi birini kullanıyorsanız, UNION ALL, tipik sorguları performansını test etmek ve bu yaklaşımı kullanarak kolaylık performans yararı kaybı daha ağır basar mı karar.

[!NOT]

Columnstore dizin tablo salt okunur yapmak için bir mekanizma olarak oluşturmayın. Columnstore dizine sahip tabloları güncelleştirme sınırlama bültenleri gelecek garantisi yoktur. Salt okunur davranışı gerekli olduğunda bu salt okunur bir dosya grubu oluşturup bu filegroup tablo taşıma zorunlu.

En iyi uygulamalar: Bir sütun deposu dizin sütunları seçme

Bazı performans yararı columnstore dizin okuyabilen ve sorgu işleme işlenmiş veri sayfa sayısını azaltan sıkıştırma teknikleri türetilmiş. Sıkıştırma en iyi karakter veya yinelenen değerleri büyük miktarlarda olan sayısal sütunlar üzerinde çalışır. Örneğin, boyut tablolarından, posta kodu, şehir ve satış bölgeleri için sütunlar olabilir. Çok sayıda posta kodlarının her şehirde bulunan ve birçok şehirler satış her bölgede bulunan, sonra satış bölge sütununa en sıkıştırılmış olacaktır, Şehir sütununda-cekti-si olmak biraz daha az sıkıştırma ve posta kodu daha az sıkıştırma olurdu. Tüm sütunları bir columnstore dizini için iyi adaylar olsa da, columnstore için satış bölgesi kodu sütunu ekleme dizini columnstore sıkıştırma büyük fayda elde edecek ve posta kodu az elde edecek.

Üst

En iyi uygulamalar: Bölümlenmiş tablolar

Columnstore dizinler sorguları bölümleme ortak olduğu çok büyük veri ambarı senaryolarda desteklemek üzere tasarlanmıştır. Columnstore dizini bir tablodaki verilerin düzenli olarak güncelleştirilmesi gerekir bölümleme önerilir. Columnstore dizin bölümlerini güncelleştirme hakkında daha fazla bilgi için bkz: önceki bölümde en iyi uygulamalar: Columnstore dizin verileri güncelleştirmek.

Üst

Nasıl yapılır: bir Columnstore dizini oluşturma

Columnstore dizin oluşturmak, diğer bir dizin oluşturma gibi olur. Sen-ebilmek yaratmak a columnstore dizini kullanarak Transact-SQLveya kullanarak SQL Server Management Studiografik araçları.

Kullanarak columnstore dizin oluşturmaTransact-SQL

  • Sorgu Düzenleyicisi penceresinde, idam CREATE COLUMNSTORE INDEXdeyimi. Bir örnek için bkz: Create FactResellerSalesPtnd tablo yukarıda. Daha fazla bilgi için, bkz. columnstore Index (Transact-sql) oluştur.

Kullanarak columnstore dizin oluşturmaSQL Server Management Studio

  1. Kullanarak Management Studio, örneğine bağlanmak için Object Explorer'ı kullanın SQL Server Veritabanı Altyapısı.

  2. Nesne Explorer'da örneği genişletin SQL Servergenişletin veritabanları, bir veritabanını genişletmek, bir tablo genişletin, tabloyu sağ tıklatın, Gelin Yeni bir dizinve ardından Non-Clustered Columnstore dizin.

  3. İçinde dizin adı iletişim kutusunun altında Genel sekmesinde, yeni bir dizin için bir ad yazın ve ardından Ekle.

  4. İçinde Sütunları Seç iletişim kutusunda, columnstore dizininde katılmak ve ardından sütunları seçin Tamam dizini oluşturmak için iki kere.

Nasıl yapılır: bir Columnstore dizin boyutunu belirleme

Columnstore dizin hem kesimleri ve sözlükler oluşur. Nasıl bir columnstore dizini toplam boyutunu belirlemek için aşağıdaki örnekte gösterilmiştir (üzerinde FactResellerSalesPtnd tablo) ile birleşen on_disk_size sütunlarından sys.column_store_segments ve sys.column_store_dictionaries.

SELECT SUM(on_disk_size_MB) AS TotalSizeInMB
FROM
(
   (SELECT SUM(css.on_disk_size)/(1024.0*1024.0) on_disk_size_MB
    FROM sys.indexes AS i
    JOIN sys.partitions AS p
        ON i.object_id = p.object_id 
    JOIN sys.column_store_segments AS css
        ON css.hobt_id = p.hobt_id
    WHERE i.object_id = object_id('FactResellerSalesPtnd') 
    AND i.type_desc = 'NONCLUSTERED COLUMNSTORE') 
  UNION ALL
   (SELECT SUM(csd.on_disk_size)/(1024.0*1024.0) on_disk_size_MB
    FROM sys.indexes AS i
    JOIN sys.partitions AS p
        ON i.object_id = p.object_id 
    JOIN sys.column_store_dictionaries AS csd
        ON csd.hobt_id = p.hobt_id
    WHERE i.object_id = object_id('FactResellerSalesPtnd') 
    AND i.type_desc = 'NONCLUSTERED COLUMNSTORE') 
) AS SegmentsPlusDictionary

Nasıl yapılır: bir sütun deposu dizin performansı sorunlarını giderme.

Columnstore dizin kullanılır olup olmadığını belirlemek için sorgu yürütme planı incelemek. Üç unsur ne zaman maksimum yararı elde mevcut.

  • Sorgu yürütme planında mevcut columnstore dizinidir.

    Sütun Deposu Dizini Tarama

    columnstore dizin tarama işleci simgesi

    Columnstore dizin kullanılmadığı ve columnstore sorgu faydalı olacağını düşünüyorsanız kullanarak columnstore dizin kullanımını zorlamak sorgu performansı değerlendirmek WITH (INDEX(<indexname>))İpucu. Aşağıdaki örnek, dizin İpucu sorgu gösterir.

    SELECT d.CalendarYear,
        d.CalendarQuarter,
        COUNT(*) AS NumberSold
    FROM dbo.FactResellerSalesPtnd AS f WITH (INDEX(csindx_FactResellerSalesPtnd))
        JOIN dbo.DimDate AS d
        ON f.OrderDateKey = d.DateKey
    WHERE ProductKey = 215
    GROUP BY d.CalendarYear, d.CalendarQuarter
    ORDER BY d.CalendarYear, d.CalendarQuarter;
    
  • İşaretçiyi taşıdığınızda grafik sorgu planı gerçek yürütme modunu columnstore dizini simgesi satır yerine toplu olarak listelenir.

  • Bir bit eşlem fiziksel işleci simgesi bu bit eşlem filtre birleştirme işleminden önce satır sayısını düşürdüğünü gösteren grafik yürütme planı yok.

    Bit eşlem işleci simgesi

    bit eşlem işleç simgesini

Üst

ilişkili Görevler

columnstore Index (Transact-sql) oluştur

İlişkili İçerik

sys.column_store_index_stats (Transact-SQL)

sys.column_store_dictionaries (Transact-sql)

sys.column_store_segments (Transact-sql)