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
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analytics Platform Sistemi (PDW)
Microsoft Fabric'teki SQL veritabanı
Satır deposu tablosunu kümelenmiş columnstore dizinine dönüştürün veya kümelenmemiş bir columnstore dizini oluşturun. OlTP iş yükünde gerçek zamanlı operasyonel analizleri verimli bir şekilde çalıştırmak veya veri ambarı iş yükleri için veri sıkıştırma ve sorgu performansını geliştirmek için columnstore dizini kullanın.
Bu özellikteki en son geliştirmeler için columnstore dizinlerindeki yenilikler'i izleyin.
Sql Server 2022'de (16.x) sıralı kümelenmiş columnstore dizinleri kullanıma sunuldu. Daha fazla bilgi için bkz. CREATE COLUMNSTORE INDEX. Columnstore dizinlerinin erişilebilirliği için bkz. Columnstore dizinleri: Genel Bakış.
SQL Server 2016'dan (13.x) başlayarak, tabloyu kümelenmiş columnstore dizini olarak oluşturabilirsiniz. Artık önce bir satır deposu tablosu oluşturmak ve sonra bunu kümelenmiş columnstore dizinine dönüştürmek gerekmez.
Columnstore dizini tasarım yönergeleri hakkında bilgi için bkz. Columnstore dizinleri - Tasarım kılavuzu.
Transact-SQL söz dizimi kuralları
Sözdizimi
Azure SQL Veritabanı ve Azure SQL Yönetilen ÖrneğiAUTD söz dizimi:
-- Create a clustered columnstore index on disk-based table.
CREATE CLUSTERED COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ ORDER (column [ , ...n ] ) ]
[ WITH ( <with_option> [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
-- Create a nonclustered columnstore index on a disk-based table.
CREATE [ NONCLUSTERED ] COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
( column [ , ...n ] )
[ ORDER (column [ , ...n ] ) ]
[ WHERE <filter_expression> [ AND <filter_expression> ] ]
[ WITH ( <with_option> [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
<with_option> ::=
DROP_EXISTING = { ON | OFF } -- default is OFF
| MAXDOP = max_degree_of_parallelism
| ONLINE = { ON | OFF }
| COMPRESSION_DELAY = { 0 | delay [ MINUTES ] }
| DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
[ ON PARTITIONS ( { partition_number_expression | range } [ , ...n ] ) ]
<on_option>::=
partition_scheme_name ( column_name )
| filegroup_name
| "default"
<filter_expression> ::=
column_name IN ( constant [ , ...n ]
| column_name { IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !< } constant )
SQL Server söz dizimi:
-- Create a clustered columnstore index on disk-based table.
CREATE CLUSTERED COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ WITH ( <with_option> [ , ...n ] ) ]
[ ORDER (column [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
-- Create a nonclustered columnstore index on a disk-based table.
CREATE [ NONCLUSTERED ] COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
( column [ , ...n ] )
[ ORDER (column [ , ...n ] ) ]
[ WHERE <filter_expression> [ AND <filter_expression> ] ]
[ WITH ( <with_option> [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
<with_option> ::=
DROP_EXISTING = { ON | OFF } -- default is OFF
| MAXDOP = max_degree_of_parallelism
| ONLINE = { ON | OFF }
| COMPRESSION_DELAY = { 0 | delay [ MINUTES ] }
| DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
[ ON PARTITIONS ( { partition_number_expression | range } [ , ...n ] ) ]
<on_option>::=
partition_scheme_name ( column_name )
| filegroup_name
| "default"
<filter_expression> ::=
column_name IN ( constant [ , ...n ]
| column_name { IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !< } constant )
Azure Synapse Analytics ve Analytics Platform Sistemi (PDW) için söz dizimi:
CREATE CLUSTERED COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ ORDER ( column [ , ...n ] ) ]
[ WITH ( DROP_EXISTING = { ON | OFF } ) ] -- default is OFF
[;]
Sürüm kullanılabilirliği
Bazı seçenekler tüm veritabanı altyapısı sürümlerinde kullanılamaz. Aşağıdaki tabloda, kümelenmiş columnstore ve kümelenmemiş columnstore dizinlerinde seçeneklerin sunulduğu sürümler gösterilmektedir:
Seçenek | kümelenmiş | KÜMELENMİDİ |
---|---|---|
COMPRESSION_DELAY | SQL Server 2016 (13.x) | SQL Server 2016 (13.x) |
VERİ_SIKIŞTIRMA | SQL Server 2016 (13.x) | SQL Server 2016 (13.x) |
ÇEVRİMİÇİ | SQL Server 2019 (15.x) | SQL Server 2017 (14.x) |
WHERE ifadesi | Mevcut Değil | SQL Server 2016 (13.x) |
ORDER yan tümcesi | SQL Server 2016 (13.x) | SQL Server 2025 (17.x) Önizlemesi |
Tüm seçenekler Azure SQL Veritabanı ve Azure SQL Yönetilen ÖrneğiAUTD'de kullanılabilir.
Özellik kullanılabilirliği hakkında daha fazla ayrıntı için bkz. Columnstore dizinlerindeki yenilikler.
Tartışmalar
KÜMELENMIŞ COLUMNSTORE DIZINI OLUŞTURMA
Tüm verilerin sütuna göre sıkıştırıldığı ve depolandığı kümelenmiş bir columnstore dizini oluşturun. Dizin, tablodaki tüm sütunları içerir ve tablonun tamamını depolar. Mevcut tablo bir yığın veya kümelenmiş dizinse, kümelenmiş columnstore dizinine dönüştürülür. Tablo zaten kümelenmiş columnstore dizini olarak depolanıyorsa, mevcut dizin bırakılır ve yeniden oluşturulur.
Önemli
Doku'daki SQL veritabanında, kümelenmiş columnstore dizini ait olduğu tabloyla aynı toplu işlem veya işlem içinde oluşturulmalıdır. Tablo oluşturulduktan sonra bir tabloya kümelenmiş columnstore dizini eklemek aşağıdaki hataya neden olabilir:
Msg 35354, Level 16, State 1, Line 63, The statement failed because a clustered columnstore index cannot be created on a table enabled for Change Feed. Consider disabling Change Feed and then creating the clustered columnstore index.
index_name
Yeni dizinin adını belirtir.
Tabloda zaten bir kümelenmiş columnstore dizini varsa, var olan dizinle aynı adı belirtebilir veya DROP EXISTING seçeneğini kullanarak yeni bir ad belirtebilirsiniz.
ON [ database_name. [ schema_name ] . | schema_name . ] table_name
Kümelenmiş columnstore dizini olarak depolanacak tablonun bir, iki veya üç bölümlü adını belirtir. Tablo bir yığınsa veya kümelenmiş bir dizine sahipse, tablo bir satır deposundan columnstore'a dönüştürülür. Tablo zaten bir columnstore ise, bu deyim kümelenmiş columnstore dizinini yeniden oluşturur.
Kümelenmiş columnstore için ORDER
column_store_order_ordinal
Kümelenmiş columnstore dizini için sütunların sırasını belirlemek için sys.index_columns sütununu kullanın. Columnstore sıralama, özellikle dize verileriyle segment ortadan kaldırmaya yardımcı olur. Daha fazla bilgi için bkz. Sıralı columnstore dizinleriyle performans ayarlama ve Columnstore dizinleri - Tasarım kılavuzu.
Sıralı bir kümelenmiş columnstore dizinine dönüştürmek için mevcut dizinin kümelenmiş bir columnstore dizini olması gerekir.
DROP_EXISTING
seçeneğini kullanın.
LOB veri türleri (maksimum) uzunluklu veri türleri, sıralı kümelenmiş columnstore dizininin anahtarı olamaz.
Sıralı kümelenmiş columnstore dizini oluştururken, deyiminin MAXDOP = 1
çok daha uzun bir süresi CREATE INDEX
karşılığında en yüksek kaliteli sıralama seçeneğini kullanın. Dizini mümkün olan en hızlı şekilde oluşturmak için MAXDOP'u sınırlandırmayın. En yüksek sıkıştırma ve sıralama kalitesi columnstore dizinindeki sorgulara yardımcı olabilir.
Columnstore dizinlerinin erişilebilirliği için bkz. Columnstore dizinleri: Genel Bakış.
WITH seçenekleri
DROP_EXISTING = [KAPALI] | ÜZERİNDE
DROP_EXISTING = ON
, var olan dizini bırakmayı ve yeni bir columnstore dizini oluşturmayı belirtir.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH (DROP_EXISTING = ON);
varsayılan değer olan DROP_EXISTING = KAPALI, dizin adının mevcut adla aynı olmasını bekler. Belirtilen dizin adı zaten varsa bir hata oluşur.
MAXDOP = max_degree_of_parallelism
Bu seçenek, dizin işlemi sırasında mevcut en yüksek paralellik derecesi sunucu yapılandırmasını geçersiz kılabilir. Paralel plan yürütmesinde kullanılan işlemci sayısını sınırlamak için MAXDOP kullanın. Maksimum değer 64 işlemcidir.
max_degree_of_parallelism değerler:
- 1, paralel plan oluşturmayı gizleme anlamına gelir.
- >1, paralel dizin işleminde kullanılan en fazla işlemci sayısını geçerli sistem iş yüküne göre belirtilen sayıda veya daha az işlemciyle kısıtlamak anlamına gelir. Örneğin, MAXDOP = 4 olduğunda, kullanılan işlemci sayısı 4 veya daha azdır.
- 0 (varsayılan), geçerli sistem iş yüküne göre gerçek işlemci sayısını veya daha azını kullanmak anlamına gelir.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH (MAXDOP = 2);
Daha fazla bilgi için bkz . Sunucu yapılandırması: maksimum paralellik derecesi ve Paralel Dizin İşlemlerini Yapılandırma.
COMPRESSION_DELAY = 0 | delay [ DAKİkA ]
Disk tabanlı bir tablo için gecikme , kapalı durumdaki bir delta satır grubunun delta satır grubunda kalması gereken en az dakika sayısını belirtir. SQL Server daha sonra sıkıştırılmış satır grubuna sıkıştırabilir. Disk tabanlı tablolar tek tek satırlarda ekleme ve güncelleştirme sürelerini izlemediğinden, SQL Server gecikmeyi kapalı durumdaki delta satır gruplarına uygular.
Varsayılan değer 0 dakikadır.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH ( COMPRESSION_DELAY = 10 MINUTES );
COMPRESSION_DELAY ne zaman kullanılacağına ilişkin öneriler için bkz. Gerçek zamanlı operasyonel analiz için Columnstore ile çalışmaya başlama.
DATA_COMPRESSION = COLUMNSTORE | COLUMNSTORE_ARCHIVE
Belirtilen tablo, bölüm numarası veya bölüm aralığı için veri sıkıştırma seçeneğini belirtir. Seçenekler şunlardır:
-
COLUMNSTORE
varsayılandır ve en performanslı columnstore sıkıştırmasıyla sıkıştırmayı belirtir. Bu seçenek tipik bir seçimdir. -
COLUMNSTORE_ARCHIVE
tabloyu veya bölümü daha küçük bir boyuta sıkıştırır. Daha küçük bir depolama boyutu gerektiren ve depolama ve alma için daha fazla zaman ayırabilen arşivleme gibi durumlar için bu seçeneği kullanın.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH ( DATA_COMPRESSION = COLUMNSTORE_ARCHIVE );
Sıkıştırma hakkında daha fazla bilgi için bkz. Veri sıkıştırma.
ÇEVRİmİÇİ = [ON | KAPALI]
-
ON
, dizinin yeni kopyası oluşturulurken columnstore dizininin çevrimiçi ve kullanılabilir durumda kaldığını belirtir. -
OFF
yeni kopya oluşturulurken dizinin kullanılamadığını belirtir.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH ( ONLINE = ON );
ON seçenekleri
Bu seçeneklerle, bölüm düzeni, belirli bir dosya grubu veya varsayılan dosya grubu gibi veri depolama seçeneklerini belirtebilirsiniz. AÇILDI seçeneği belirtilmezse, dizin mevcut tablonun ayarlar bölümünü veya dosya grubu ayarlarını kullanır.
partition_scheme_name ( column_name ) tablonun bölüm düzenini belirtir. Bölüm düzeni veritabanında zaten mevcut olmalıdır. Bölüm düzenini oluşturmak için bkz . CREATE PARTITION SCHEME (Transact-SQL).
column_name bölümlenmiş dizinin bölümlendiği sütunu belirtir. Bu sütun, partition_scheme_name'nin kullandığı bölüm işlevinin bağımsız değişkeninin veri türü, uzunluğu ve duyarlığıyla eşleşmelidir.
filegroup_name kümelenmiş columnstore dizinini depolamak için dosya grubunu belirtir. Konum belirtilmezse ve tablo bölümlenmemişse, dizin temel tablo veya görünümle aynı dosya grubunu kullanır. Dosya grubu zaten var olmalıdır.
Dizini varsayılan dosya grubunda oluşturmak için veya "default"
kullanın[default]
. belirtirseniz "default"
, QUOTED_IDENTIFIER
seçeneği geçerli oturum için olmalıdır ON
.
QUOTED_IDENTIFIER
varsayılan değerdir ON
. Daha fazla bilgi için bkz. SET QUOTED_IDENTIFIER (Transact-SQL).
CREATE [NONCLUSTERED] COLUMNSTORE INDEX
Yığın veya kümelenmiş dizin olarak depolanan bir satır deposu tablosunda kümelenmemiş sütun deposu dizini oluşturun. Dizin filtrelenmiş bir koşula sahip olabilir ve temel alınan tablonun tüm sütunlarını içermesi gerekmez. Columnstore dizini, verilerin bir kopyasını depolamak için yeterli alan gerektirir. Dizini güncelleştirebilirsiniz ve temel tablo değiştikçe güncelleştirilir. Kümelenmiş bir dizindeki kümelenmemiş columnstore dizini gerçek zamanlı analiz sağlar.
index_name
Dizinin adını belirtir. index_name tablo içinde benzersiz olmalıdır, ancak veritabanında benzersiz olması gerekmez. Dizin adları tanımlayıcıların kurallarına uymalıdır.
( sütun [ ,... n ] )
Depoya alınacak sütunları belirtir. Kümelenmemiş columnstore dizini 1.024 sütunla sınırlıdır.
Her sütun, columnstore dizinleri için desteklenen bir veri türünde olmalıdır. Desteklenen veri türlerinin listesi için bkz. Sınırlamalar ve kısıtlamalar .
ON [ database_name. [ schema_name ] . | schema_name . ] table_name
Dizini içeren tablonun bir, iki veya üç bölümlü adını belirtir.
Kümelenmemiş columnstore için ORDER
Kümelenmemiş columnstore dizini için yan tümcesinde ORDER
belirtilen sütunlar, dizin için anahtar sütunların bir alt kümesi olmalıdır.
column_store_order_ordinal
sütununu, kümelenmemiş columnstore dizini için sütunların sırasını belirlemek için kullanın. Columnstore sıralama, özellikle dize verileriyle segment ortadan kaldırmaya yardımcı olur. Daha fazla bilgi için bkz. Sıralı columnstore dizinleriyle performans ayarlama ve Columnstore dizinleri - Tasarım kılavuzu. Bu makalelerdeki tasarım ve performans konuları genellikle hem kümelenmiş hem de kümelenmemiş columnstore dizinleri için geçerlidir.
LOB veri türleri (maksimum) uzunluklu veri türleri, sıralı bir kümelenmemiş columnstore dizininin anahtarı olamaz.
Sıralı bir kümelenmemiş columnstore dizini oluştururken, deyiminin MAXDOP = 1
çok daha uzun bir süresi CREATE INDEX
karşılığında en yüksek kaliteli sıralama seçeneklerini kullanın. Dizini mümkün olan en hızlı şekilde oluşturmak için sınırlamayın MAXDOP
. En yüksek sıkıştırma ve sıralama kalitesi columnstore dizinindeki sorgulara yardımcı olabilir.
Sıralı columnstore dizini kullanılabilirliği için bkz. Sıralı columnstore dizini kullanılabilirliği.
WITH seçenekleri
DROP_EXISTING = [KAPALI] | ÜZERİNDE
DROP_EXISTING = ON Mevcut dizin bırakılır ve yeniden oluşturulur. Belirtilen dizin adı şu anda var olan bir dizinle aynı olmalıdır; ancak dizin tanımı değiştirilebilir. Örneğin, farklı sütunlar veya dizin seçenekleri belirtebilirsiniz.
DROP_EXISTING = KAPALI
Belirtilen dizin adı zaten varsa bir hata gösterilir. Dizin türü DROP_EXISTING kullanılarak değiştirilemez. Geriye dönük uyumlu söz diziminde, WITH DROP_EXISTING, WITH DROP_EXISTING = ON ile eşdeğerdir.
MAXDOP = max_degree_of_parallelism
Dizin işlemi sırasında Sunucu yapılandırmasını geçersiz kılar: en yüksek paralellik derecesi yapılandırma seçeneği. Paralel plan yürütmesinde kullanılan işlemci sayısını sınırlamak için MAXDOP kullanın. Maksimum değer 64 işlemcidir.
max_degree_of_parallelism değerler:
- 1, paralel plan oluşturmayı gizleme anlamına gelir.
- >1, paralel dizin işleminde kullanılan en fazla işlemci sayısını geçerli sistem iş yüküne göre belirtilen sayıda veya daha az işlemciyle kısıtlamak anlamına gelir. Örneğin, MAXDOP = 4 olduğunda, kullanılan işlemci sayısı 4 veya daha azdır.
- 0 (varsayılan), geçerli sistem iş yüküne göre gerçek işlemci sayısını veya daha azını kullanmak anlamına gelir.
Daha fazla bilgi için bkz. Paralel Dizin İşlemlerini Yapılandırma.
Uyarı
Paralel dizin işlemleri Microsoft SQL Server'ın her sürümünde kullanılamaz. SQL Server sürümleri tarafından desteklenen özelliklerin listesi için bkz. Sürümleri ve SQL Server 2022'nin desteklenen özellikleri.
ÇEVRİmİÇİ = [ON | KAPALI]
-
ON
, dizinin yeni kopyası oluşturulurken columnstore dizininin çevrimiçi ve kullanılabilir durumda kaldığını belirtir. -
OFF
yeni kopya oluşturulurken dizinin kullanılamadığını belirtir. Kümelenmemiş bir dizinde temel tablo kullanılabilir durumda kalır. Yeni dizin tamamlanana kadar sorguları karşılamak için yalnızca kümelenmemiş columnstore dizini kullanılmaz.
CREATE COLUMNSTORE INDEX ncci ON Sales.OrderLines (StockItemID, Quantity, UnitPrice, TaxRate)
WITH ( ONLINE = ON );
COMPRESSION_DELAY = 0 | delay [ DAKİkA ]
Bir satırın, sıkıştırılmış bir satır grubuna geçiş için uygun olmadan önce delta satır grubunda ne kadar süre kalması gerektiğine ilişkin alt sınırı belirtir. Örneğin, bir satır 120 dakika boyunca değişmediyse, bu satırın sütunlu depolama biçimine sıkıştırılmaya uygun olduğunu söyleyebilirsiniz.
Disk tabanlı tablolardaki bir columnstore dizini için, satırın eklendiği veya güncelleştirildiği zaman izlenmez. Bunun yerine, delta satır grubu kapalı saati satır için ara sunucu olarak kullanılır. Varsayılan süre 0 dakikadır. Delta satır grubunda 1 milyon satır biriktiklerinde satır sütunlu depolamaya geçirilir ve kapalı olarak işaretlenir.
VERİ_SIKIŞTIRMA
Belirtilen tablo, bölüm numarası veya bölüm aralığı için veri sıkıştırma seçeneğini belirtir. Hem kümelenmemiş hem de kümelenmiş dahil olmak üzere yalnızca columnstore dizinleri için geçerlidir. Seçenekler şunlardır:
-
COLUMNSTORE
varsayılandır ve en performanslı columnstore sıkıştırmasıyla sıkıştırmayı belirtir. Bu seçenek tipik bir seçimdir. -
COLUMNSTORE_ARCHIVE
tabloyu veya bölümü daha küçük bir boyuta sıkıştırır. Arşivleme için veya daha küçük bir depolama boyutu gerektiren ve depolama ve alma için daha fazla zaman ayırabilen diğer durumlarda bu seçeneği kullanabilirsiniz.
Sıkıştırma hakkında daha fazla bilgi için bkz. Veri sıkıştırma.
WHERE <filter_expression> [ AND <filter_expression> ]
Filtre koşulu olarak adlandırılan bu seçenek, dizine eklenecek satırları belirtir. SQL Server, filtrelenmiş dizindeki veri satırlarında filtrelenmiş istatistikler oluşturur.
Filtre koşulu basit karşılaştırma mantığı kullanır. Karşılaştırma işleçleriyle değişmez değerleri kullanan NULL
karşılaştırmalara izin verilmez.
IS NULL
Bunun yerine ve IS NOT NULL
işleçlerini kullanın.
Tablo için filtre koşullarının bazı örnekleri aşağıda verilmiştir Production.BillOfMaterials
:
WHERE StartDate > '20000101' AND EndDate <= '20000630'
WHERE ComponentID IN (533, 324, 753)
WHERE StartDate IN ('20000404', '20000905') AND EndDate IS NOT NULL
Filtrelenmiş dizinler hakkında yönergeler için bkz. Filtrelenmiş dizinler oluşturma.
ON seçenekleri
Aşağıdaki seçenekler dizinin oluşturulduğu dosya gruplarını belirtir.
partition_scheme_name ( column_name )
Bölümlenmiş dizinin bölümlerinin eşlendiği dosya gruplarını tanımlayan bölüm düzenini belirtir. Bölüm düzeni , CREATE PARTITION SCHEME yürütülerek veritabanında bulunmalıdır.
column_name bölümlenmiş dizinin bölümlendiği sütunu belirtir. Bu sütun, partition_scheme_name'nin kullandığı bölüm işlevinin bağımsız değişkeninin veri türü, uzunluğu ve duyarlığıyla eşleşmelidir. column_name dizin tanımındaki sütunlarda sınırlı değildir. Bir columnstore dizinini bölümlerken, Veritabanı Altyapısı bölümleme sütununu henüz belirtilmemişse dizinin sütunu olarak ekler.
Tablo bölümlenmişse ve partition_scheme_name veya dosya grubu belirtilmemişse, dizin aynı bölüm düzenine yerleştirilir ve temel tabloyla aynı bölümleme sütununu kullanır.
Bölümlenmiş bir tablodaki columnstore dizininin bölüme hizalanmış olması gerekir. Dizinleri bölümleme hakkında daha fazla bilgi için bkz . Bölümlenmiş tablolar ve dizinler.
filegroup_name
Dizinin oluşturulacağı dosya grubu adını belirtir. filegroup_name belirtilmezse ve tablo bölümlenmemişse, dizin temel tabloyla aynı dosya grubunu kullanır. Dosya grubu zaten var olmalıdır.
"varsayılan"
Varsayılan dosya grubunda belirtilen dizini oluşturur.
Bu bağlamda varsayılan terimi bir anahtar sözcük değildir. Varsayılan dosya grubu için bir tanımlayıcıdır ve veya ON "default"
içinde ON [default]
olduğu gibi sınırlandırılmalıdır. Belirtilirse "default"
, geçerli oturum için varsayılan ayar olan QUOTED_IDENTIFIER seçeneği ON olmalıdır. Daha fazla bilgi için bkz. SET QUOTED_IDENTIFIER.
İzinler
Tabloda değişiklik yapmak için ALTER izni gereklidir.
Açıklamalar
Geçici bir tabloda columnstore dizini oluşturabilirsiniz. Tablo bırakıldığında veya oturum sona erdiğinde dizin de bırakılır.
Fabric SQL veritabanında, kümelenmiş columnstore dizinlerine sahip tablolar Fabric OneLake'e yansıtılmaz.
Filtrelenmiş dizinler
Filtrelenmiş dizin, bir tablodan küçük bir satır yüzdesi seçen sorgular için uygun, iyileştirilmiş, kümelenmemiş bir dizindir. Tablodaki verilerin bir kısmını dizine almak için bir filtre koşulu kullanır. İyi tasarlanmış bir filtrelenmiş dizin sorgu performansını artırabilir, depolama maliyetlerini azaltabilir ve bakım maliyetlerini azaltabilir.
Filtrelenmiş dizinler için gerekli SET seçenekleri
Aşağıdaki koşullardan herhangi biri oluştuğunda gerekli değer sütunundaki SET seçenekleri gereklidir:
- Filtrelenmiş bir dizin oluşturursunuz.
- INSERT, UPDATE, DELETE veya MERGE işlemi filtrelenmiş bir dizindeki verileri değiştirir.
- Sorgu iyileştiricisi, sorgu planını oluşturmak için filtrelenmiş dizini kullanır.
SET seçenekleri | Gerekli değer | Varsayılan sunucu değeri | Varsayılan OLE DB ve ODBC değeri | Varsayılan DB-Library değeri |
---|---|---|---|---|
ANSI_NULLS (ANSI NULL Değerleri Ayarları) | AÇIK | AÇIK | AÇIK | KAPALI |
ANSI_PADDING | AÇIK | AÇIK | AÇIK | KAPALI |
ANSI_WARNINGS 1 | AÇIK | AÇIK | AÇIK | KAPALI |
ARITHABORT | AÇIK | AÇIK | KAPALI | KAPALI |
CONCAT_NULL_YIELDS_NULL (Boş değerler birleştirildiğinde boş değer döner) | AÇIK | AÇIK | AÇIK | KAPALI |
SAYISAL_YUVARLAMADURDUR | KAPALI | KAPALI | KAPALI | KAPALI |
TIRNAKLI_BELİRLEYİCİ | AÇIK | AÇIK | AÇIK | KAPALI |
1 veritabanı uyumluluk düzeyi 90 veya üzeri olarak ayarlandığında ANSI_WARNINGS ON olarak ayarlanması, ARITHABORT'ı örtük olarak ON olarak ayarlar. Veritabanı uyumluluk düzeyi 80 veya daha eski bir değere ayarlanmışsa, ARITHABORT seçeneğini açıkça AÇIK olarak ayarlamanız gerekir.
SET seçenekleri yanlışsa aşağıdaki koşullar oluşabilir:
Filtrelenmiş dizin oluşturulmaz.
Veritabanı Altyapısı bir hata oluşturur ve dizindeki verileri değiştiren INSERT, UPDATE, DELETE veya MERGE deyimlerini geri alır.
Sorgu iyileştiricisi, Transact-SQL deyimleri için yürütme planındaki dizini dikkate almaz.
Filtrelenmiş dizinler hakkında daha fazla bilgi için bkz. Filtrelenmiş dizinler oluşturma.
Sınırlamalar ve kısıtlamalar
Columnstore dizinindeki her sütun aşağıdaki yaygın iş veri türlerinden birinde olmalıdır:
- datetimeoffset [ ( n ) ]
- datetime2 [ ( n ) ]
- tarih ve saat
- smalldatetime
- tarih
- time [ ( n ) ]
- float [ ( n ) ]
- real [ ( n ) ]
- decimal [ ( duyarlık [ , ölçek ] ) ]
- numeric [ ( precision [ , scale ] ) ]
- para
- küçük para
- büyük
- Int
- smallint
- tinyint
- bit
- nvarchar [ ( n ) ]
- nvarchar(max)1
- nchar [ ( n ) ]
- varchar [ ( n ) ]
- varchar(max)1
- char [ ( n ) ]
- varbinary [ ( n ) ]
- varbinary(max)1
- binary [ ( n ) ]
- uniqueidentifier2
1 Yalnızca kümelenmiş columnstore dizinlerindeki SQL Server 2017 (14.x) ve Premium katmanında Azure SQL Veritabanı, Standart katman (S3 ve üzeri) ve tüm sanal çekirdek teklifleri katmanları için geçerlidir.
2 SQL Server 2014 (12.x) ve sonraki sürümler için geçerlidir.
Temel alınan tabloda sütun deposu dizinleri için desteklenmeyen bir veri türü sütunu varsa, bu sütunu kümelenmemiş columnstore dizininden atlamalısınız.
8 kilobayttan büyük büyük nesne (LOB) verileri, yalnızca sütun kesiminde depolanan fiziksel konumu gösteren bir işaretçiyle satır dışı, LOB depolama alanında depolanır. Depolanan verilerin boyutu sys.column_store_segments, sys.column_store_dictionaries veya sys.dm_db_column_store_row_group_physical_stats raporlanmaz.
Aşağıdaki veri türlerinden herhangi birini kullanan sütunlar columnstore dizinine eklenemez:
- ntext, text ve image
- nvarchar(max), varchar(max)ve varbinary(max)1
- rowversion (ve zaman damgası)
- sql_variant
- CLR türleri (hiyerarşi kimliği ve uzamsal türler)
- XML
- uniqueidentifier2
1 SQL Server 2016 (13.x) ve önceki sürümler ve kümelenmemiş columnstore dizinleri için geçerlidir.
2 SQL Server 2012 (11.x) için geçerlidir.
Kümelenmemiş columnstore dizinleri:
- 1.024'ten fazla sütun olamaz.
- Kısıtlama tabanlı dizin olarak oluşturulamaz. Columnstore dizini olan bir tabloda benzersiz kısıtlamalara, birincil anahtar kısıtlamalarına ve yabancı anahtar kısıtlamalarına sahip olmak mümkündür. Kısıtlamalar her zaman bir satır deposu diziniyle zorlanır. Kısıtlamalar bir columnstore (kümelenmiş veya kümelenmemiş) diziniyle zorlanamaz.
- Seyrek sütun eklenemez.
- ALTER INDEX deyimi kullanılarak değiştirilemez. Kümelenmemiş dizini değiştirmek için, bunun yerine columnstore dizinini bırakmanız ve yeniden oluşturmanız gerekir. BIR columnstore dizinini devre dışı bırakmak ve yeniden oluşturmak için ALTER INDEX kullanabilirsiniz.
- INCLUDE anahtar sözcüğü kullanılarak oluşturulamaz.
- Dizin sütunları listesinde veya
ASC
anahtar sözcükleri belirtemezDESC
. Columnstore dizinleri sıkıştırma algoritmalarına göre sıralanır. - Azure SQL Veritabanı'nda Microsoft Fabric'teki SQL veritabanı, Azure SQL Yönetilen ÖrneğiAUTD ve SQL Server 2025 (17.x) Önizlemesi yan tümcesi
ORDER
dahil edilerek sıralanabilir. Daha fazla bilgi için bkz. Sıralı columnstore dizinleriyle performans ayarlama. - Nvarchar(max), varchar(max)ve varbinary(max) türünde LOB sütunları, kümelenmemiş columnstore dizinlerine eklenemez. YALNıZCA kümelenmiş columnstore dizinleri SQL Server 2017 (14.x) sürümünden, Azure SQL Veritabanı'nda (Premium katmanında, Standart katmanda (S3 ve üzeri) ve tüm sanal çekirdek teklifleri katmanlarından başlayarak LOB türlerini destekler. Önceki sürümler kümelenmiş ve kümelenmemiş columnstore dizinlerindeki LOB türlerini desteklemez.
- SQL Server 2016'dan (13.x) başlayarak, dizinli bir görünümde kümelenmemiş bir columnstore dizini oluşturabilirsiniz.
Columnstore dizinleri aşağıdaki özelliklerle birleştirilemiyor:
- Hesaplanan sütunlar. SQL Server 2017'den (14.x) başlayarak, kümelenmiş columnstore dizini kalıcı olmayan bir hesaplanmış sütun içerebilir. Ancak SQL Server 2017'de (14.x) kümelenmiş columnstore dizinleri kalıcı hesaplanan sütunlar içeremez ve hesaplanan sütunlarda kümelenmemiş dizinler oluşturamazsınız.
- Sayfa ve satır sıkıştırma ve vardecimal depolama biçimi. (Columnstore dizini zaten farklı bir biçimde sıkıştırılmış.)
- Kümelenmiş columnstore dizinleriyle çoğaltma. Kümelenmemiş columnstore dizinleri desteklenir. Daha fazla bilgi için bkz. sp_addarticle.
- Dosya akışı.
Kümelenmiş columnstore dizini olan bir tabloda imleçleri veya tetikleyicileri kullanamazsınız. Bu kısıtlama, kümelenmemiş columnstore dizinleri için geçerli değildir. Kümelenmemiş columnstore dizini olan bir tabloda imleçleri ve tetikleyicileri kullanabilirsiniz.
SQL Server 2014 (12.x) özel sınırlamaları:
Aşağıdaki sınırlamalar yalnızca SQL Server 2014 (12.x) için geçerlidir. Bu sürümde güncelleştirilebilir, kümelenmiş columnstore dizinlerini kullanabilirsiniz. Kümelenmemiş columnstore dizinleri hala salt okunur durumdadır.
- Değişiklik izleme. Değişiklik izlemeyi columnstore dizinleriyle kullanamazsınız.
- Veri yakalamayı değiştirme. Bu özellik, kümelenmiş columnstore dizini olan tablolarda etkinleştirilemiyor. SQL Server 2016'dan (13.x) başlayarak, kümelenmemiş columnstore dizini olan tablolarda değişiklik verileri yakalama etkinleştirilebilir.
- Okunabilir ikincil. Her Zaman Açık okunabilir kullanılabilirlik grubunun okunabilir bir ikincil bölümünden kümelenmiş columnstore dizinine (CCI) erişemezsiniz. Bir kümelenmemiş columnstore dizinine (NCCI) okunabilir bir ikincil dizinden erişebilirsiniz.
- Birden çok Etkin Sonuç Kümesi (MARS). SQL Server 2014 (12.x), columnstore dizini olan tablolara salt okunur bağlantılar için bu özelliği kullanır. Ancak SQL Server 2014 (12.x), columnstore dizini olan bir tablodaki eşzamanlı veri işleme dili (DML) işlemleri için bu özelliği desteklemez. Bu özelliği bu amaçla kullanmaya çalışırsanız, SQL Server bağlantıları sonlandırır ve işlemleri iptal eder.
- Kümelenmemiş columnstore dizinleri bir görünümde veya dizinlenmiş görünümde oluşturulamaz.
Columnstore dizinlerinin performans avantajları ve sınırlamaları hakkında bilgi için bkz. Columnstore dizinleri: Genel bakış.
Meta veriler
Bir columnstore dizinindeki tüm sütunlar meta verilerde dahil edilen sütunlar olarak depolanır. columnstore dizininde anahtar sütunlar yoktur. Aşağıdaki sistem görünümleri columnstore dizinleri hakkında bilgi sağlar:
- sys.indexes (Transact-SQL)
- sys.index_columns (Transact-SQL)
- sys.partitions (Transact-SQL)
- sys.column_store_segments (Transact-SQL)
- sys.column_store_dictionaries (Transact-SQL)
- sys.column_store_row_groups (Transact-SQL)
Örnekler: tabloyu rowstore'dan columnstore'a dönüştürme
A. Yığını kümelenmiş columnstore dizinine dönüştürme
Bu örnek yığın olarak bir tablo oluşturur ve bunu adlı cci_Simple
kümelenmiş columnstore dizinine dönüştürür. Kümelenmiş columnstore dizininin oluşturulması, tablonun tamamı için depolama alanını satır deposundan columnstore'a değiştirir.
CREATE TABLE dbo.SimpleTable(
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
CREATE CLUSTERED COLUMNSTORE INDEX cci_Simple ON dbo.SimpleTable;
GO
B. Kümelenmiş dizini aynı ada sahip kümelenmiş columnstore dizinine dönüştürme
Bu örnek, kümelenmiş dizine sahip bir tablo oluşturur ve kümelenmiş dizini kümelenmiş columnstore dizinine dönüştürme söz dizimini gösterir. Kümelenmiş columnstore dizininin oluşturulması, tablonun tamamı için depolama alanını satır deposundan columnstore'a değiştirir.
CREATE TABLE dbo.SimpleTable2 (
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
CREATE CLUSTERED INDEX cl_simple ON dbo.SimpleTable2 (ProductKey);
GO
CREATE CLUSTERED COLUMNSTORE INDEX cl_simple ON dbo.SimpleTable2
WITH (DROP_EXISTING = ON);
GO
C. Bir rowstore tablosunu columnstore dizinine dönüştürürken kümelenmemiş dizinleri işleme
Bu örnekte, bir satır deposu tablosunu columnstore dizinine dönüştürdüğünüzde, kümelenmemiş dizinlerin nasıl işlendiği gösterilmektedir. SQL Server 2016(13.x) sürümünden itibaren özel bir eylem gerekmez. SQL Server, kümelenmiş yeni columnstore dizinindeki kümelenmemiş dizinleri otomatik olarak tanımlar ve yeniden oluşturur.
Kümelenmemiş dizinleri bırakmak istiyorsanız, columnstore dizinini oluşturmadan önce DROP INDEX deyimini kullanın. DROP EXISTING seçeneği yalnızca dönüştürülmekte olan kümelenmiş dizini bırakır. Kümelenmemiş dizinleri bırakmaz.
SQL Server 2012 (11.x) ve SQL Server 2014'te (12.x), columnstore dizininde kümelenmemiş dizin oluşturamazsınız.
--Create the table for use with this example.
CREATE TABLE dbo.SimpleTable (
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
--Create two nonclustered indexes for use with this example
CREATE INDEX nc1_simple ON dbo.SimpleTable (OrderDateKey);
CREATE INDEX nc2_simple ON dbo.SimpleTable (DueDateKey);
GO
Yalnızca SQL Server 2012 (11.x) ve SQL Server 2014 (12.x) için columnstore dizinini oluşturmak için kümelenmemiş dizinleri bırakmanız gerekir.
DROP INDEX dbo.SimpleTable.nc1_simple;
DROP INDEX dbo.SimpleTable.nc2_simple;
--Convert the rowstore table to a columnstore index.
CREATE CLUSTERED COLUMNSTORE INDEX cci_simple ON dbo.SimpleTable;
GO
D. Büyük bir olgu tablosunu rowstore'dan columnstore'a dönüştürme
Bu örnekte, büyük bir olgu tablosunun satır deposu tablosundan columnstore tablosuna nasıl dönüştürüldüğü açıklanmaktadır.
Bu örnekte kullanmak için küçük bir tablo oluşturun.
--Create a rowstore table with a clustered index and a nonclustered index. CREATE TABLE dbo.MyFactTable ( ProductKey [INT] NOT NULL, OrderDateKey [INT] NOT NULL, DueDateKey [INT] NOT NULL, ShipDateKey [INT] NOT NULL INDEX IDX_CL_MyFactTable CLUSTERED ( ProductKey ) ); --Add a nonclustered index. CREATE INDEX my_index ON dbo.MyFactTable ( ProductKey, OrderDateKey );
Tüm kümelenmemiş dizinleri rowstore tablosundan bırakın. Dizinleri daha sonra yeniden oluşturmak için betik oluşturmak isteyebilirsiniz.
--Drop all nonclustered indexes DROP INDEX my_index ON dbo.MyFactTable;
Rowstore tablosunu kümelenmiş columnstore dizini olan bir columnstore tablosuna dönüştürün.
İlk olarak, mevcut kümelenmiş satır deposu dizininin adını arayın. 1. Adımda dizinin adını olarak
IDX_CL_MyFactTable
ayarlayacağız. Dizin adı belirtilmemişse, otomatik olarak oluşturulan benzersiz bir dizin adı verilmiştir. Otomatik olarak oluşturulan adı aşağıdaki örnek sorguyla alabilirsiniz:SELECT i.object_id, i.name, t.object_id, t.name FROM sys.indexes i INNER JOIN sys.tables t ON i.object_id = t.object_id WHERE i.type_desc = 'CLUSTERED' AND t.name = 'MyFactTable';
1. Seçenek: Mevcut kümelenmiş dizini
IDX_CL_MyFactTable
bırakın ve columnstore'ya dönüştürünMyFactTable
. Yeni kümelenmiş columnstore dizininin adını değiştirin.--Drop the clustered rowstore index. DROP INDEX [IDX_CL_MyFactTable] ON dbo.MyFactTable; GO --Create a new clustered columnstore index with the name MyCCI. CREATE CLUSTERED COLUMNSTORE INDEX IDX_CCL_MyFactTable ON dbo.MyFactTable; GO
Seçenek 2: Columnstore'a dönüştürün ve mevcut satır deposu kümelenmiş dizin adını yeniden kullanın.
--Create the clustered columnstore index, --replacing the existing rowstore clustered index of the same name CREATE CLUSTERED COLUMNSTORE INDEX [IDX_CL_MyFactTable] ON dbo.MyFactTable WITH (DROP_EXISTING = ON);
E. Columnstore tablosunu kümelenmiş dizine sahip bir rowstore tablosuna dönüştürme
Columnstore tablosunu kümelenmiş dizine sahip bir satır deposu tablosuna dönüştürmek için, DROP_EXISTING seçeneğiyle CREATE INDEX deyimini kullanın.
CREATE CLUSTERED INDEX [IDX_CL_MyFactTable]
ON dbo.[MyFactTable] ( ProductKey )
WITH ( DROP_EXISTING = ON );
F. Columnstore tablosunu rowstore yığınına dönüştürme
Bir columnstore tablosunu satır deposu yığınına dönüştürmek için kümelenmiş columnstore dizinini bırakın. Bu genellikle önerilmez, ancak bazılarının dar kullanımları olabilir. Yığınlar hakkında daha fazla bilgi için bkz. Yığınlar (kümelenmiş dizinleri olmayan tablolar).
DROP INDEX [IDX_CL_MyFactTable]
ON dbo.[MyFactTable];
G. columnstore dizinini yeniden düzenleyerek birleştirme
Kümelenmiş columnstore dizinini korumanın iki yolu vardır. SQL Server 2016(13.x) ile başlayarak REBUILD yerine kullanın ALTER INDEX...REORGANIZE
. Daha fazla bilgi için bkz. Columnstore dizin satır grubu. SQL Server'ın önceki sürümlerinde CREATE CLUSTERED COLUMNSTORE INDEX komutunu DROP_EXISTING=ON veya ALTER INDEX (Transact-SQL) ve REBUILD seçeneğiyle kullanabilirsiniz. Her iki yöntem de aynı sonuçları elde etti.
içinde kümelenmiş columnstore dizin adını MyFactTable
belirleyerek başlayın.
SELECT i.object_id, i.name, t.object_id, t.name
FROM sys.indexes i
INNER JOIN sys.tables t on i.object_id = t.object_id
WHERE i.type_desc = 'CLUSTERED COLUMNSTORE'
AND t.name = 'MyFactTable';
columnstore dizininde REORGANIZE gerçekleştirerek parçalanmayı kaldırın.
--Rebuild the entire index by using ALTER INDEX and the REBUILD option.
ALTER INDEX IDX_CL_MyFactTable
ON dbo.[MyFactTable]
REORGANIZE;
Kümelenmemiş columnstore dizinleri için örnekler
A. Rowstore tablosunda ikincil dizin olarak columnstore dizini oluşturma
Bu örnek, bir satır deposu tablosunda kümelenmemiş bir columnstore dizini oluşturur. Bu durumda yalnızca bir columnstore dizini oluşturulabilir. Columnstore dizini, rowstore tablosundaki verilerin bir kopyasını içerdiğinden ek depolama gerektirir. Bu örnek basit bir tablo ve bir satır deposu kümelenmiş dizini oluşturur ve ardından kümelenmemiş columnstore dizini oluşturma söz dizimini gösterir.
CREATE TABLE dbo.SimpleTable (
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
CREATE CLUSTERED INDEX cl_simple ON dbo.SimpleTable (ProductKey);
GO
CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON dbo.SimpleTable (OrderDateKey, DueDateKey, ShipDateKey);
GO
B. Tüm seçenekleri kullanarak temel bir kümelenmemiş columnstore dizini oluşturma
Aşağıdaki örnek, DEFAULT dosya grubunda en yüksek paralellik derecesini (MAXDOP) 2 olarak belirterek kümelenmemiş bir columnstore dizini oluşturma söz dizimini gösterir.
CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON SimpleTable (OrderDateKey, DueDateKey, ShipDateKey)
WITH (DROP_EXISTING = ON,
MAXDOP = 2)
ON "DEFAULT";
GO
C. Filtrelenmiş koşula sahip bir kümelenmemiş columnstore dizini oluşturma
Aşağıdaki örnek, örnek veritabanındaki tabloda Production.BillOfMaterials
filtrelenmiş, kümelenmemiş bir columnstore dizini AdventureWorks2022
oluşturur. Filtre koşulu, filtrelenmiş dizinde anahtar sütun olmayan sütunlar içerebilir. Bu örnekteki koşul yalnızca NULL olmayan satırları EndDate
seçer.
IF EXISTS (SELECT name FROM sys.indexes
WHERE name = N'FIBillOfMaterialsWithEndDate'
AND object_id = OBJECT_ID(N'Production.BillOfMaterials'))
DROP INDEX FIBillOfMaterialsWithEndDate
ON Production.BillOfMaterials;
GO
CREATE NONCLUSTERED COLUMNSTORE INDEX "FIBillOfMaterialsWithEndDate"
ON Production.BillOfMaterials (ComponentID, StartDate)
WHERE EndDate IS NOT NULL;
D. Kümelenmemiş columnstore dizinindeki verileri değiştirme
Şunlar için geçerlidir: SQL Server 2012 (11.x) ile SQL Server 2014 (12.x) arasında.
SQL Server 2014 (12.x) ve önceki sürümlerinde, bir tabloda kümelenmemiş bir columnstore dizini oluşturduktan sonra, bu tablodaki verileri doğrudan değiştiremezsiniz. INSERT, UPDATE, DELETE veya MERGE içeren bir sorgu başarısız olur ve bir hata iletisi döndürür. Tablodaki verileri eklemek veya değiştirmek için kullanabileceğiniz seçenekler şunlardır:
columnstore dizinini devre dışı bırakın veya bırakın. Ardından tablodaki verileri güncelleştirebilirsiniz. Columnstore dizinini devre dışı bırakırsanız, verileri güncelleştirmeyi bitirdiğinizde columnstore dizinini yeniden oluşturabilirsiniz. Örneğin:
ALTER INDEX mycolumnstoreindex ON dbo.mytable DISABLE; -- update the data in mytable as necessary ALTER INDEX mycolumnstoreindex on dbo.mytable REBUILD;
Columnstore dizini olmayan bir hazırlama tablosuna veri yükleyin. Hazırlama tablosunda bir columnstore dizini oluşturun. Hazırlama tablosunu ana tablonun boş bir bölümüne geçin.
Columnstore dizini olan bir bölümü tablodan boş bir hazırlama tablosuna geçin. Hazırlama tablosunda bir columnstore dizini varsa columnstore dizinini devre dışı bırakın. Tüm güncelleştirmeleri gerçekleştirin. Columnstore dizinini derleyin (veya yeniden derleyin). Hazırlama tablosunu ana tablonun (şimdi boş) bölümüne geri getirin.
Örnekler: Azure Synapse Analytics, Analiz Platformu Sistemi (PDW)
A. Kümelenmiş dizini kümelenmiş columnstore diziniyle değiştirme
DROP_EXISTING = ON ile CREATE CLUSTERED COLUMNSTORE INDEX deyimini kullanarak şunları yapabilirsiniz:
Kümelenmiş dizini kümelenmiş columnstore dizini olarak değiştirin.
Kümelenmiş columnstore dizinini yeniden oluşturun.
Bu örnek, xDimProduct
tabloyu kümelenmiş dizine sahip bir satır deposu tablosu olarak oluşturur. Daha sonra örnek, create CLUSTERED COLUMNSTORE INDEX işlevini kullanarak tabloyu bir rowstore tablosundan columnstore tablosuna dönüştürecek.
-- Uses AdventureWorks
IF EXISTS (SELECT name FROM sys.tables
WHERE name = N'xDimProduct'
AND object_id = OBJECT_ID (N'xDimProduct'))
DROP TABLE xDimProduct;
--Create a distributed table with a clustered index.
CREATE TABLE xDimProduct (ProductKey, ProductAlternateKey, ProductSubcategoryKey)
WITH ( DISTRIBUTION = HASH(ProductKey),
CLUSTERED INDEX (ProductKey) )
AS SELECT ProductKey, ProductAlternateKey, ProductSubcategoryKey FROM DimProduct;
kullanarak sys.indexes
sistem meta verilerinde yeni tablo için otomatik olarak oluşturulan kümelenmiş dizinin adını arayın. Örneğin:
SELECT i.object_id, i.name, t.object_id, t.name, i.type_desc
FROM sys.indexes i
INNER JOIN sys.tables t ON i.object_id = t.object_id
WHERE i.type_desc = 'CLUSTERED'
AND t.name = 'xdimProduct';
Şimdi şunları seçebilirsiniz:
- Otomatik olarak oluşturulan bir adla mevcut kümelenmiş columnstore dizinini bırakın, ardından kullanıcı tanımlı bir adla yeni bir kümelenmiş columnstore dizini oluşturun.
- Mevcut dizini bırakın ve kümelenmiş columnstore diziniyle değiştirin ve gibi
ClusteredIndex_1bd8af8797f7453182903cc68df48541
sistem tarafından oluşturulan aynı adı koruyun.
Örneğin:
--1. DROP the existing clustered columnstore index with an automatically-created name, for example:
DROP INDEX ClusteredIndex_1bd8af8797f7453182903cc68df48541 on xdimProduct;
GO
CREATE CLUSTERED COLUMNSTORE INDEX [<new_index_name>]
ON xdimProduct;
GO
--Or,
--2. Change the existing clustered index to a clustered columnstore index with the same name.
CREATE CLUSTERED COLUMNSTORE INDEX [ClusteredIndex_1bd8af8797f7453182903cc68df48541]
ON xdimProduct
WITH ( DROP_EXISTING = ON );
GO
B. Kümelenmiş columnstore dizinini yeniden oluşturma
Bu örnekte, önceki örnekte derlenmiş olarak adlandırılan cci_xDimProduct
mevcut kümelenmiş columnstore dizinini yeniden oluşturmak için CREATE CLUSTERED COLUMNSTORE INDEX kullanılmıştır.
--Rebuild the existing clustered columnstore index.
CREATE CLUSTERED COLUMNSTORE INDEX cci_xDimProduct
ON xdimProduct
WITH ( DROP_EXISTING = ON );
C. Kümelenmiş columnstore dizininin adını değiştirme
Kümelenmiş columnstore dizininin adını değiştirmek için, mevcut kümelenmiş columnstore dizinini bırakın ve dizini yeni bir adla yeniden oluşturun.
Bu işlemi küçük veya boş bir tabloyla sınırlamanızı öneririz. Büyük, kümelenmiş bir columnstore dizininin bırakılması ve farklı bir adla yeniden oluşturulması uzun zaman alır.
Bu örnek, önceki örnekteki cci_xDimProduct
kümelenmiş columnstore dizinine başvurur. Bu örnek, kümelenmiş columnstore dizinini cci_xDimProduct
bırakır ve ardından adlı mycci_xDimProduct
kümelenmiş columnstore dizinini yeniden oluşturur.
--For illustration purposes, drop the clustered columnstore index.
--The table continues to be distributed, but changes to a heap.
DROP INDEX cci_xdimProduct ON xDimProduct;
--Create a clustered index with a new name, mycci_xDimProduct.
CREATE CLUSTERED COLUMNSTORE INDEX mycci_xDimProduct
ON xdimProduct
WITH ( DROP_EXISTING = OFF );
D. Columnstore tablosunu kümelenmiş dizine sahip bir rowstore tablosuna dönüştürme
Kümelenmiş columnstore dizinini bırakmak ve kümelenmiş dizin oluşturmak istediğiniz bir durum olabilir. Kümelenmiş columnstore dizinini bıraktığınızda, tablo satır deposu biçimine değiştirilir. Bu örnek, bir columnstore tablosunu aynı ada sahip kümelenmiş dizine sahip bir rowstore tablosuna dönüştürür. Verilerin hiçbiri kaybolmaz. Tüm veriler rowstore tablosuna gider ve listelenen sütunlar kümelenmiş dizindeki anahtar sütunlar olur.
--Drop the clustered columnstore index and create a clustered rowstore index.
--All of the columns are stored in the rowstore clustered index.
--The columns listed are the included columns in the index.
CREATE CLUSTERED INDEX cci_xDimProduct
ON xdimProduct (ProductKey, ProductAlternateKey, ProductSubcategoryKey, WeightUnitMeasureCode)
WITH ( DROP_EXISTING = ON);
E. Columnstore tablosunu yeniden satır deposu yığınına dönüştürme
DROP INDEX kullanarak kümelenmiş columnstore dizinini bırakın ve tabloyu bir satır deposu yığınına dönüştürün. Bu örnek, tabloyu bir satır deposu yığınına dönüştürür cci_xDimProduct
. Tablo dağıtılmaya devam eder, ancak yığın olarak depolanır.
--Drop the clustered columnstore index. The table continues to be distributed, but changes to a heap.
DROP INDEX cci_xdimProduct ON xdimProduct;
F. Dizin içermeyen bir tabloda sıralı kümelenmiş columnstore dizini oluşturma
Sıralanmamış bir columnstore dizini, sütun listesi belirtmeye gerek kalmadan tüm sütunları varsayılan olarak kapsar. Sıralı columnstore dizini, sütunların sırasını belirtmenize olanak tanır. Listenin tüm sütunları içermesi gerekmez.
Daha fazla bilgi için bkz. Sıralı columnstore dizinleriyle performans ayarlama.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (SHIPDATE);
G. Kümelenmiş columnstore dizinini sıralı kümelenmiş columnstore dizinine dönüştürme
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (SHIPDATE)
WITH (DROP_EXISTING = ON);
H. Sıralı kümelenmiş columnstore dizininin sırasına sütun ekleme
Sütun deposu dizinindeki sütunlar için bir sıra belirtebilirsiniz. Özgün sıralı, kümelenmiş columnstore dizini yalnızca sütunda SHIPDATE
sıralandı. Aşağıdaki örnek sütunu sıralamaya ekler PRODUCTKEY
. Columnstore dizinlerinin erişilebilirliği için bkz. Columnstore dizinleri: Genel Bakış.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (SHIPDATE, PRODUCTKEY)
WITH (DROP_EXISTING = ON);
Ben. Sıralı sütunların sıralısını değiştirme
Özgün sıralı, kümelenmiş columnstore dizini üzerinde SHIPDATE
PRODUCTKEY
sıralandı. Aşağıdaki örnek sıralamayı PRODUCTKEY
olarak değiştirir. SHIPDATE
Columnstore dizinlerinin erişilebilirliği için bkz. Columnstore dizinleri: Genel Bakış.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (PRODUCTKEY,SHIPDATE)
WITH (DROP_EXISTING = ON);
J. Sıralı kümelenmiş columnstore dizini oluşturma
Sıralama anahtarlarıyla kümelenmiş columnstore dizini oluşturabilirsiniz. Sıralı kümelenmiş columnstore dizini oluştururken en yüksek sıralama kalitesi ve en kısa süre için sorgu ipucunu MAXDOP = 1
uygulamanız gerekir. Columnstore dizinlerinin erişilebilirliği için bkz. Columnstore dizinleri: Genel Bakış.
CREATE CLUSTERED COLUMNSTORE INDEX [OrderedCCI] ON dbo.FactResellerSalesPartCategoryFull
ORDER (EnglishProductSubcategoryName, EnglishProductName)
WITH (MAXDOP = 1, DROP_EXISTING = ON);