Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'teki SQL veritabanı
Sıralı columnstore dizinleri, sorgu koşuluyla eşleşmeyen büyük miktarlardaki sıralı verileri atlayarak daha hızlı performans sağlayabilir. Verileri sıralı bir columnstore dizinine yüklemek ve dizin yeniden oluşturma yoluyla düzeni korumak sıralı olmayan bir dizinden daha uzun sürerken, dizine alınan sorgular sıralı columnstore ile daha hızlı çalışabilir.
Sorgu bir columnstore dizinini okuduğunda, Veritabanı Altyapısı her sütun kesiminde depolanan en düşük ve en yüksek değerleri denetler. İşlem, sorgu koşulunun sınırlarının dışında kalan kesimleri ortadan kaldırır. Başka bir deyişle, diskten veya bellekten veri okurken bu kesimleri atlar. Okunacak kesim sayısı ve toplam boyutları önemli ölçüde daha küçükse sorgu daha hızlı tamamlanır.
Belirli veri yükü örüntülerinde, columnstore dizinindeki veriler ORDER tümcesi belirtilmeden örtük olarak sıralanabilir. Örneğin, veri yüklemeleri her gün gerçekleşirse veriler bir load_date sütuna göre sıralanabilir. Bu durumda, sorgu performansı zaten bu örtük sıralamadan faydalanabilir. columnstore dizinini load_date yan tümcesinde aynı ORDER sütuna açıkça göre sıralamak büyük olasılıkla ek bir performans avantajı sağlamaz.
Çeşitli SQL platformlarında ve SQL Server sürümlerinde sıralı columnstore dizini kullanılabilirliği için bkz. Sıralı columnstore dizini kullanılabilirliği.
Columnstore dizinleri için son eklenen özellikler hakkında daha fazla bilgi için bkz. Columnstore dizinlerindeki yenilikler.
Düzenli ve düzensiz columnstore dizini karşılaştırması
Bir columnstore dizininde, her satır grubunun her sütunundaki veriler ayrı bir segmentte sıkıştırılır. Her kesim, en düşük ve en yüksek değerlerini açıklayan meta veriler içerdiğinden, sorgu yürütme işlemi sorgu koşulunun sınırlarının dışında kalan segmentleri atlayabilir.
Columnstore indeksi sıralı olmadığında, indeks yapıcı verileri segmentlere sıkıştırmadan önce sıralamaz. Bu, çakışan değer aralıklarına sahip segmentlerin oluşabileceği ve sorguların gerekli verileri elde etmek için daha fazla segment okumasına neden olabileceği anlamına gelir. Sonuç olarak sorguların tamamlanması daha uzun sürebilir.
ORDER deyiminde yan tümcesini belirttiğinizde, Veritabanı Altyapısı, dizin oluşturma işlemi verileri segmentlere sıkıştırmadan önce her bir sıralama sütununun her segmentindeki verileri sıralar. Sıralanmış verilerle, segment çakışmaları azaltılır veya ortadan kaldırılır, bu da sorguların daha verimli bir segment eleme işlemi yapmasına olanak sağlar, böylece daha az veri segmenti bulunur ve okunacak veri daha az olur, bu nedenle performans daha hızlı olur.
Segment çakışmalarını azaltma ve sorgu performansını geliştirme
Sıralı bir columnstore dizini oluşturduğunuzda, Veritabanı Altyapısı verileri en iyi çaba temelinde sıralar. Kullanılabilir belleğe, veri boyutuna, paralellik derecesine, dizin türüne (kümelenmiş ve kümelenmemiş) ve dizin derleme türüne (çevrimdışı veya çevrimiçi) bağlı olarak, columnstore dizinindeki bir sütundaki sıra, segment çakışması olmadan dolu veya bazı segment çakışmalarıyla kısmi olabilir. Daha az çakışan kesim olduğunda, sütun sırası avantajından yararlanabilen bir sorgu daha hızlı çalışır.
Tavsiye
Columnstore dizininin bir sütunundaki sıra kısmi olsa bile, segmentler yine de ortadan kaldırılabilir (atlanabilir). Birçok segmentin çakışmasını önleyen kısmi bir düzen, performans avantajları elde etmek için tam bir dizi gerektirmez.
Aşağıdaki tabloda, dizin derleme seçeneklerine bağlı olarak sıralı bir columnstore dizini oluştururken veya yeniden oluştururken elde edilen sıra türü açıklanır.
| Önkoşullar | Sipariş türü |
|---|---|
ONLINE = ON ve MAXDOP = 1 |
Full |
ONLINE = OFF, MAXDOP = 1ve sıralanacak veriler sorgu çalışma alanı belleğine tam olarak sığar |
Full |
| Diğer tüm durumlar | Kısmi |
İlk durumda hem ONLINE = ON hem de MAXDOP = 1 olduğunda, sıralama sorgu çalışma alanı belleğiyle sınırlı değildir çünkü sıralı bir columnstore dizininin çevrimiçi oluşturulması, belleğe sığmayan verileri dökmek için tempdb veritabanını kullanır. Bu yaklaşım, ek tempdb G/Ç nedeniyle dizin derleme işlemini yavaşlatabilir ve tempdb içinde de yeterli boş alan gerektirir. Ancak, dizin derlemesi çevrimiçi gerçekleştirildiğinden, sorgular yeni sıralı dizin oluşturulurken mevcut dizini kullanmaya devam edebilir.
Benzer şekilde, bölümlenmiş bir columnstore dizini çevrimdışı yeniden oluşturulduğunda, yeniden oluşturma işlemi her seferinde bir bölüm üzerinde gerçekleştirilir. Diğer bölümler sorgular için kullanılabilir durumda kalır.
MAXDOP 1'den büyük olduğunda, sıralı columnstore dizin derlemesi için kullanılan her iş parçacığı bir veri alt kümesi üzerinde çalışır ve yerel olarak sıralar. Farklı iş parçacıklarına göre sıralanan veriler arasında küresel bir sıralama yoktur. Paralel iş parçacıklarının kullanılması, dizini oluşturma süresini kısaltabilir, ancak tek bir iş parçacığı kullanıldığından daha fazla çakışan kesimle sonuçlanabilir.
Sıralı columnstore dizinlerini yalnızca bazı SQL platformlarında ve SQL Server sürümlerinde çevrimiçi olarak oluşturabilir veya yeniden oluşturabilirsiniz. Daha fazla bilgi için bkz. Ürün sürümleri için özellik özeti.
SQL Server'da, çevrimiçi dizin işlemleri tüm sürümlerde kullanılamaz. Daha fazla bilgi için bkz. SQL Server 2025'in sürümleri ve desteklenen özellikleri ve Dizin işlemlerini çevrimiçi gerçekleştirme.
Belirli veri türleri ve kodlamalar için sys.column_store_segments sistem görünümü, segment çakışmalarının sayısını bulmanıza yardımcı olabilir. Bu görünümü temel alan örnek betik, mevcut veritabanındaki tüm columnstore dizinlerinin uygun sütunlarının sıra kalitesini belirler.
Sorgu performansı
Sıralı bir columnstore dizininden elde edilen performans kazancı sorgu desenlerine, verilerin boyutuna, çakışan kesim sayısına ve sorgu yürütme için kullanılabilir işlem kaynaklarına bağlıdır.
Aşağıdaki desenlere sahip sorgular genellikle sıralı columnstore dizinleriyle daha hızlı çalışır:
- Eşitlik, eşitsizlik veya aralık koşullarını içeren sorgular.
- Koşul belirten sütunlar ve sıralı CCI sütunlarının aynı olduğu sorgular.
Aşağıdaki örnekte, tabloda T1 , Col_Cve Col_B sıralı sütunlar olarak kümelenmiş bir columnstore dizini Col_Avardır.
CREATE CLUSTERED COLUMNSTORE INDEX OrderedCCI
ON T1
ORDER (Col_C, Col_B, Col_A);
Sorgu 1, sıralı columnstore dizininden 2 ve 3'ten daha fazla sorgudan yararlanır, çünkü sorgu 1 koşulundaki tüm sıralı sütunlara başvurur.
-- query 1
SELECT *
FROM T1
WHERE Col_C = 'c'
AND Col_B = 'b'
AND Col_A = 'a';
-- query 2
SELECT *
FROM T1
WHERE Col_B = 'b'
AND Col_A = 'a';
-- query 3
SELECT *
FROM T1
WHERE Col_A = 'a'
AND Col_C = 'c';
Veri yükleme performansı
Sıralı columnstore dizini olan bir tabloya veri yükünün performansı bölümlenmiş tabloya benzer. Veri sıralama işlemi nedeniyle verilerin yüklenmesi sıralı olmayan bir columnstore dizininden daha uzun sürebilir, ancak sorgular daha sonra daha hızlı çalışabilir.
Yeni veri ekleme veya mevcut verileri güncelleştirme
Sıralı bir columnstore dizinine sahip tablodaki DML işlemi veya toplu yükleme işleminden elde edilen yeni veriler, yalnızca o parti içinde sıralanır. Bir columnstore dizinindeki sıkıştırılmış satır grupları sabit olduğundan tablodaki mevcut verileri içeren genel sıralama yoktur.
Yeni veri ekledikten veya mevcut verileri güncelleştirdikten sonra segment çakışmasını azaltmak için columnstore dizinini yeniden oluşturun.
Examples
Sıralı columnstore dizini oluşturun
Kümelenmiş sıralı sütun deposu dizini
CREATE CLUSTERED COLUMNSTORE INDEX OCCI
ON dbo.Table1
ORDER(Column1, Column2);
Kümelenmemiş sıralı sütun deposu dizini
CREATE NONCLUSTERED COLUMNSTORE INDEX ONCCI
ON dbo.Table1(Column1, Column2, Column3)
ORDER(Column1, Column2);
Sıralı sütunları ve sıralama sırasını denetleme
SELECT OBJECT_SCHEMA_NAME(c.object_id) AS schema_name,
OBJECT_NAME(c.object_id) AS table_name,
c.name AS column_name,
i.column_store_order_ordinal
FROM sys.index_columns AS i
INNER JOIN sys.columns AS c
ON i.object_id = c.object_id
AND c.column_id = i.column_id
WHERE column_store_order_ordinal > 0;
Sipariş sütunlarını ekleyin veya kaldırın ve mevcut bir sıralı columnstore dizinini yeniden oluşturun.
Kümelenmiş sıralı sütun deposu dizini
CREATE CLUSTERED COLUMNSTORE INDEX OCCI
ON dbo.Table1
ORDER(Column1, Column2)
WITH (DROP_EXISTING = ON);
Kümelenmemiş sıralı sütun deposu dizini
CREATE NONCLUSTERED COLUMNSTORE INDEX ONCCI
ON dbo.Table1(Column1, Column2, Column3)
ORDER(Column1, Column2)
WITH (DROP_EXISTING = ON);
Çevrimiçi tam sıralı bir kümelenmiş columnstore dizinini bir yığın tablosunda oluşturma
CREATE CLUSTERED COLUMNSTORE INDEX OCCI
ON dbo.Table1
ORDER(Column1)
WITH (ONLINE = ON, MAXDOP = 1);
Tam sıralamayla çevrimiçi olarak sıralı bir kümelenmiş columnstore dizinini yeniden oluşturma
CREATE CLUSTERED COLUMNSTORE INDEX OCCI
ON dbo.Table1
ORDER(Column1)
WITH (DROP_EXISTING = ON, ONLINE = ON, MAXDOP = 1);
İlgili içerik
- Columnstore dizin tasarım yönergeleri
- Columnstore dizinleri - veri yükleme rehberi
- Gerçek zamanlı operasyonel analiz için columnstore dizinlerini kullanmaya başlama
- Veri ambarında sütun deposu dizinleri
- Sorgu performansını geliştirmek ve kaynak tüketimini azaltmak için dizin bakımını iyileştirme
- Columnstore dizin mimarisi
- İNDEKS OLUŞTUR (Transact-SQL)
- alter index (Transact-SQL)