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.
Tablonun bir veya daha fazla sütunu, dizinli görünüm veya dış tablo üzerinde sorgu iyileştirme istatistikleri oluşturur. Çoğu sorgu için sorgu iyileştiricisi zaten yüksek kaliteli bir sorgu planı için gerekli istatistikleri oluşturur; birkaç durumda, sorgu performansını geliştirmek için sorgu tasarımıyla CREATE STATISTICS
ek istatistikler oluşturmanız veya bu tasarımı değiştirmeniz gerekir.
Daha fazla bilgi edinmek için bkz. İstatistikler.
Uyarı
Microsoft Fabric'teki istatistikler hakkında daha fazla bilgi için bkz. Doku veri ambarında istatistikler.
Transact-SQL söz dizimi kuralları
Sözdizimi
SQL Server, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği için söz dizimi.
-- Create statistics on an external table
CREATE STATISTICS statistics_name
ON { table_or_indexed_view_name } ( column [ , ...n ] )
[ WITH FULLSCAN ] ;
-- Create statistics on a regular table or indexed view
CREATE STATISTICS statistics_name
ON { table_or_indexed_view_name } ( column [ , ...n ] )
[ WHERE <filter_predicate> ]
[ WITH
[ FULLSCAN
[ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]
| SAMPLE number { PERCENT | ROWS }
[ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]
| <update_stats_stream_option> [ , ...n ]
[ [ , ] NORECOMPUTE ]
[ [ , ] INCREMENTAL = { ON | OFF } ]
[ [ , ] MAXDOP = max_degree_of_parallelism ]
[ [ , ] AUTO_DROP = { ON | OFF } ]
]
];
<filter_predicate> ::=
<conjunct> [ AND <conjunct> ]
<conjunct> ::=
<disjunct> | <comparison>
<disjunct> ::=
column_name IN (constant , ...)
<comparison> ::=
column_name <comparison_op> constant
<comparison_op> ::=
IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !<
<update_stats_stream_option> ::=
[ STATS_STREAM = stats_stream ]
[ ROWCOUNT = numeric_constant ]
[ PAGECOUNT = numeric_constant ]
Azure Synapse Analytics ve Analytics Platform Sistemi (PDW) için söz dizimi.
CREATE STATISTICS statistics_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
( column_name [ , ...n ] )
[ WHERE <filter_predicate> ]
[ WITH {
FULLSCAN
| SAMPLE number PERCENT
}
]
[ ; ]
<filter_predicate> ::=
<conjunct> [ AND <conjunct> ]
<conjunct> ::=
<disjunct> | <comparison>
<disjunct> ::=
column_name IN (constant , ...)
<comparison> ::=
column_name <comparison_op> constant
<comparison_op> ::=
IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !<
Microsoft Fabric için söz dizimi.
CREATE STATISTICS statistics_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
( column_name )
[ WITH {
FULLSCAN
| SAMPLE number PERCENT
}
]
[ ; ]
Tartışmalar
statistics_name
Oluşturulacak istatistiklerin adı.
table_or_indexed_view_name
İstatistiklerin oluşturulacağı tablonun, dizinli görünümün veya dış tablonun adı. Başka bir veritabanında istatistik oluşturmak için uygun bir tablo adı belirtin.
column [ ,... n ]
İstatistiklere eklenecek bir veya daha fazla sütun. Sütunlar soldan sağa öncelik sırasına göre olmalıdır. Histogramı oluşturmak için yalnızca ilk sütun kullanılır. Tüm sütunlar, yoğunluk olarak adlandırılan çapraz sütun bağıntı istatistikleri için kullanılır.
Dizin anahtarı sütunu olarak belirtilebilen herhangi bir sütunu aşağıdaki özel durumlarla belirtebilirsiniz:
xml, tam metin ve FILESTREAM sütunları belirtilemiyor.
Hesaplanan sütunlar yalnızca ve
QUOTED_IDENTIFIER
veritabanı ayarları iseARITHABORT
ON
belirtilebilir.Tür ikili sıralamayı destekliyorsa CLR kullanıcı tanımlı tür sütunları belirtilebilir. Yöntemlerin deterministik olarak işaretlenmesi durumunda kullanıcı tanımlı tür sütununun yöntem çağrıları olarak tanımlanan hesaplanan sütunlar belirtilebilir.
WHERE <filter_predicate>
İstatistik nesnesi oluşturulurken eklenecek satırların bir alt kümesini seçmek için bir ifade belirtir. Filtre koşuluyla oluşturulan istatistiklere filtrelenmiş istatistikler adı verilir. Filtre koşulu basit karşılaştırma mantığı kullanır ve hesaplanan sütuna, UDT sütununa, uzamsal veri türü sütununa veya hiyerarşiKIM veri türü sütununa başvuramaz. Değişmez değerleri kullanan NULL
karşılaştırmalara karşılaştırma işleçleriyle izin verilmez. Bunun yerine IS NULL
ve IS NOT NULL
işleçlerini kullanın.
Production.BillOfMaterials
tablosu için filtre koşullarının bazı örnekleri aşağıda verilmiştir:
WHERE StartDate > '20000101' AND EndDate <= '20000630'
WHERE ComponentID IN (533, 324, 753)
WHERE StartDate IN ('20000404', '20000905') AND EndDate IS NOT NULL
Filtre önkoşulları hakkında daha fazla bilgi için bkz. Filtrelenmiş dizinler oluşturma.
FULLSCAN
Şunlar için geçerlidir: SQL Server 2016 (13.x) SP 1 CU 4, SQL Server 2017 (14.x) CU 1 ve sonraki sürümleri
Tüm satırları tarayarak istatistikleri hesaplama.
FULLSCAN
ve SAMPLE 100 PERCENT
aynı sonuçlara sahip olur.
FULLSCAN
seçeneğiyle SAMPLE
kullanılamaz.
Atlandığında, SQL Server istatistikleri oluşturmak için örnekleme kullanır ve yüksek kaliteli bir sorgu planı oluşturmak için gereken örnek boyutunu belirler.
Microsoft Fabric'teki Ambar'da yalnızca tek sütunlu FULLSCAN
ve tek sütun SAMPLE
tabanlı istatistikler desteklenir. Hiçbir seçenek dahil SAMPLE
olmadığında istatistikler oluşturulur.
ÖRNEK numarası { YÜZDE | SATIRSAY }
Sorgu iyileştiricinin istatistik oluştururken kullanması için tablo veya dizinlenmiş görünümde yaklaşık yüzdeyi veya satır sayısını belirtir. içinPERCENT
, sayı 0 ile 100 arasında olabilir ve için ROWS
sayı 0'dan toplam satır sayısına kadar olabilir. Sorgu iyileştirici örneklerinin gerçek yüzde değeri veya satır sayısı, belirtilen yüzde veya sayıyla eşleşmeyebilir. Örneğin, sorgu iyileştiricisi bir veri sayfasındaki tüm satırları tarar.
SAMPLE
, varsayılan örneklemeye göre sorgu planının en iyi durumda olmadığı özel durumlar için kullanışlıdır. Çoğu durumda, sorgu iyileştiricisi zaten örnekleme kullandığından ve yüksek kaliteli sorgu planları oluşturmak için gereken istatistiksel olarak önemli örnek boyutunu varsayılan olarak belirlediğinden belirtmek gerekmez SAMPLE
.
SAMPLE
FULLSCAN seçeneğiyle kullanılamaz. Belirtildiğinde SAMPLE
veya FULLSCAN
belirtilmediğinde, sorgu iyileştiricisi örneklenmiş verileri kullanır ve varsayılan olarak örnek boyutunu hesaplar.
veya 0 ROWS
belirtilmesine 0 PERCENT
karşı öneririz.
0 PERCENT
veya 0 ROWS
belirtildiğinde istatistik nesnesi oluşturulur, ancak istatistik verileri içermez.
Microsoft Fabric'teki Ambar'da yalnızca tek sütunlu FULLSCAN
ve tek sütun SAMPLE
tabanlı istatistikler desteklenir. Hiçbir seçenek dahil FULLSCAN
olmadığında istatistikler oluşturulur.
PERSIST_SAMPLE_PERCENT = { ON | KAPALI }
olduğunda ON
istatistikler, örnekleme yüzdesini açıkça belirtmeyen sonraki güncelleştirmeler için oluşturma örnekleme yüzdesini korur. olduğunda OFF
, istatistik örnekleme yüzdesi, açıkça örnekleme yüzdesi belirtmeyen sonraki güncelleştirmelerde varsayılan örneklemeye sıfırlanır. Varsayılan değer: OFF
.
Uyarı
Tablo kesilirse, kesilen yığın veya B ağacı (HoBT) üzerinde oluşturulan tüm istatistikler varsayılan örnekleme yüzdesini kullanmaya geri döner. Benzer şekilde, satır içermeyen bir nesnede istatistikler güncelleştirilirse, daha önce yapılandırılmış olsa PERSIST_SAMPLE_PERCENT
bile varsayılan örnekleme yüzdesini kullanmaya geri döner.
STATS_STREAM = stats_stream
Yalnızca bilgilendirme amacıyla tanımlanır. Desteklenmiyor. Gelecekteki uyumluluk garanti edilmemektedir.
NORECOMPUTE
statistics_name için otomatik istatistik güncelleştirme seçeneğini AUTO_STATISTICS_UPDATE
devre dışı bırakın. Bu seçenek belirtilirse, sorgu iyileştirici statistics_name için devam eden istatistik güncelleştirmelerini tamamlar ve gelecekteki güncelleştirmeleri devre dışı bırakır.
İstatistik güncelleştirmelerini yeniden etkinleştirmek için DROP STATISTICS ile istatistikleri kaldırın ve seçeneği olmadan NORECOMPUTE
çalıştırınCREATE STATISTICS
.
Uyarı
İstatistiklerin otomatik olarak güncelleştirilmesini devre dışı bırakırsanız, Sorgu İyileştiricisi'nin tabloyu içeren sorgular için en uygun yürütme planlarını seçmesini engelleyebilir. Bu seçeneği tedbirli bir şekilde ve yalnızca uygun bir veritabanı yöneticisi tarafından kullanmanız gerekir.
Seçeneği hakkında AUTO_STATISTICS_UPDATE
daha fazla bilgi için bkz. ALTER DATABASE SET options. İstatistik güncelleştirmelerini devre dışı bırakma ve yeniden etkinleştirme hakkında daha fazla bilgi için bkz. İstatistikler.
ARTıMLı = { ON | KAPALI }
için geçerlidir: SQL Server 2014 (12.x) ve sonraki sürümler
olduğunda ON
, oluşturulan istatistikler bölüm istatistiklerine göredir. olduğunda OFF
, tüm bölümler için istatistikler birleştirilir. Varsayılan değer: OFF
.
Bölüm başına istatistikler desteklenmiyorsa bir hata oluşturulur. Artımlı istatistikler aşağıdaki istatistik türleri için desteklenmez:
- Temel tabloyla bölümle hizalanmamış dizinlerle oluşturulan istatistikler.
- Always On okunabilir ikincil veritabanlarında oluşturulan istatistikler.
- Salt okunur veritabanlarında oluşturulan istatistikler.
- Filtrelenmiş dizinlerde oluşturulan istatistikler.
- Görünümlerde oluşturulan istatistikler.
- İç tablolarda oluşturulan istatistikler.
- Uzamsal dizinler veya XML dizinleriyle oluşturulan istatistikler.
MAXDOP = max_degree_of_parallelism
Şunlar için geçerlidir: SQL Server 2016 (13.x) SP 2, SQL Server 2017 (14.x) CU 3 ve sonraki sürümleri
İstatistik işlemi sırasında en yüksek paralellik derecesi yapılandırma seçeneğini geçersiz kılar. Daha fazla bilgi için bkz . En yüksek paralellik derecesini yapılandırma (sunucu yapılandırma seçeneği). Paralel plan yürütmesinde kullanılan işlemci sayısını sınırlamak için kullanın MAXDOP
. Maksimum değer 64 işlemcidir.
max_degree_of_parallelism olabilir:
-
1
: Paralel plan oluşturmayı bastırır. -
>1
: Paralel dizin işleminde kullanılan en fazla işlemci sayısını belirtilen sayıyla kısıtlar. -
0
(varsayılan): Geçerli sistem iş yüküne göre gerçek işlemci sayısını veya daha azını kullanır.
update_stats_stream_option
Yalnızca bilgilendirme amacıyla tanımlanır. Desteklenmiyor. Gelecekteki uyumluluk garanti edilmemektedir.
AUTO_DROP = { ON | KAPALI }
Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri ve Azure SQL Veritabanı, Azure SQL Yönetilen Örneği
SQL Server 2022'den (16.x) önce, istatistikler kullanıcı veritabanındaki bir kullanıcı veya üçüncü taraf aracı tarafından el ile oluşturulduysa, bu istatistik nesneleri müşterinin isteyebileceği şema değişikliklerini engelleyebilir veya engelleyebilir.
SQL Server 2022 'den (16.x) AUTO_DROP
başlayarak, seçenek tüm yeni ve geçirilen veritabanlarında varsayılan olarak etkinleştirilir.
AUTO_DROP
özelliği, bir modda istatistik nesnelerinin oluşturulmasına izin verir, böylece sonraki şema değişikliği istatistik nesnesi tarafından engellenmez, bunun yerine istatistikler gerektiği gibi bırakılır. Bu şekilde, el ile AUTO_DROP
oluşturulan ve etkin istatistikler otomatik oluşturulan istatistikler gibi davranır.
Uyarı
Otomatik olarak oluşturulan istatistiklerde Auto_Drop özelliğini ayarlamaya veya kaldırmaya çalışmak hatalara neden olabilir. Otomatik oluşturulan istatistikler her zaman otomatik bırakma kullanır. Bazı yedeklemeler geri yüklendiğinde, istatistik nesnesinin bir sonraki güncelleştirilişine (el ile veya otomatik olarak) kadar bu özellik yanlış ayarlanmış olabilir. Ancak, otomatik oluşturulan istatistikler her zaman otomatik bırakma istatistikleri gibi davranır. Veritabanını önceki bir sürümden SQL Server 2022'ye (16.x) geri yüklerken, istatistik AUTO_DROP
özelliği için uygun meta verileri ayarlayarak veritabanında yürütülmesi sp_updatestats
önerilir.
Daha fazla bilgi için bkz. AUTO_DROP seçeneği.
İzinler
Şu izinlerden birini gerektirir:
ALTER TABLE
- Kullanıcı tablo sahibidir
- db_ddladmin sabit veritabanı rolüne üyelik
Açıklamalar
SQL Server, istatistik oluşturmadan önce örneklenen satırları sıralamak için kullanabilir tempdb
.
Dış tablolar için istatistikler
Dış tablo istatistikleri oluştururken, SQL Server dış tabloyu geçici bir SQL Server tablosuna aktarır ve ardından istatistikleri oluşturur. Örnek istatistikleri için yalnızca örneklenen satırlar içeri aktarılır. Büyük bir dış tablonuz varsa, tam tarama seçeneği yerine varsayılan örneklemeyi kullanmak daha hızlıdır.
Dış tablo veri türü olarak DELIMITEDTEXT
, CSV
, PARQUET
veya DELTA
kullandığında, dış tablolar CREATE STATISTICS
komut başına yalnızca bir sütun için istatistikleri destekler.
Filtrelenmiş koşula sahip istatistikler
Filtrelenmiş istatistikler, iyi tanımlanmış veri alt kümelerinden seçim yapılan sorgular için sorgu performansını geliştirebilir. Filtrelenmiş istatistikler, istatistiklere dahil edilen verilerin alt kümesini seçmek için WHERE yan tümcesinde bir filtre koşulu kullanır.
CREATE STATISTICS ne zaman kullanılır?
ne zaman kullanılacağı CREATE STATISTICS
hakkında daha fazla bilgi için bkz. İstatistikler.
Filtrelenmiş istatistikler için başvuru bağımlılıkları
sys.sql_expression_dependencies katalog görünümü, başvuru bağımlılığı olarak filtrelenmiş istatistik koşulundaki her sütunu izler. Filtrelenmiş istatistikler oluşturmadan önce tablo sütunlarında gerçekleştirdiğiniz işlemleri göz önünde bulundurun. Filtrelenmiş istatistik koşulunda tanımlanan tablo sütununun tanımını bırakamaz, yeniden adlandıramaz veya değiştiremezsiniz.
Sınırlamalar
- İstatistiklerin güncelleştirilmesi dış tablolarda desteklenmez. Dış tablodaki istatistikleri güncelleştirmek için istatistikleri bırakın ve yeniden oluşturun.
- İstatistik nesnesi başına en çok 64 sütun listeleyebilirsiniz.
- seçeneği
MAXDOP
,ROWCOUNT
vePAGECOUNT
seçenekleriyleSTATS_STREAM
uyumlu değildir. -
MAXDOP
seçeneği, kullanılıyorsa Resource Governor iş yükü grubuMAX_DOP
ayarıyla sınırlıdır. -
CREATE
veDROP STATISTICS
dış tablolarda Azure SQL Veritabanı'nda desteklenmez.
Örnekler
Bu makaledeki kod örnekleri, AdventureWorks2022
giriş sayfasından indirebileceğiniz AdventureWorksDW2022
veya örnek veritabanını kullanır.
A. ÖRNEK sayı YÜZDE ile CREATE STATISTICS kullanma
Aşağıdaki örnek, AdventureWorks2022 veritabanının ContactMail1
tablosunun ve EmailPromotion
sütunlarının BusinessEntityID
yüzde 5'inin Person
rastgele bir örneğini kullanarak istatistikleri oluşturur.
CREATE STATISTICS ContactMail1
ON Person.Person (BusinessEntityID, EmailPromotion)
WITH SAMPLE 5 PERCENT;
B. FULLSCAN ve NORECOMPUTE ile CREATE STATISTICS kullanma
Aşağıdaki örnek, tablonun ve EmailPromotion
sütunlarındaki Person
BusinessEntityID
tüm satırlar için istatistikleri oluşturur NamePurchase
ve istatistiklerin otomatik olarak yeniden derlenmesi özelliğini devre dışı bırakır.
CREATE STATISTICS NamePurchase
ON AdventureWorks2022.Person.Person (BusinessEntityID, EmailPromotion)
WITH FULLSCAN, NORECOMPUTE;
C. Filtrelenmiş istatistikler oluşturmak için CREATE STATISTICS kullanma
Aşağıdaki örnek filtrelenmiş istatistikleri ContactPromotion1
oluşturur. Veritabanı Altyapısı verilerin yüzde 50'sini örnekler ve ardından 2'ye eşit satırları EmailPromotion
seçer.
CREATE STATISTICS ContactPromotion1
ON Person.Person (BusinessEntityID, LastName, EmailPromotion)
WHERE EmailPromotion = 2
WITH SAMPLE 50 PERCENT;
GO
D. Dış tabloda istatistik oluşturma
Bir dış tabloda istatistik oluştururken, sütun listesini sağlamanın yanı sıra vermeniz gereken tek karar, satırları örneklemek veya tüm satırları tarayarak istatistikleri oluşturmaktır.
CREATE
ve DROP STATISTICS
dış tablolarda Azure SQL Veritabanı'nda desteklenmez.
SQL Server, istatistikleri oluşturmak için verileri dış tablodan geçici bir tabloya aktardığından, tam tarama seçeneği çok daha uzun sürer. Büyük bir tablo için varsayılan örnekleme yöntemi genellikle yeterlidir.
--Create statistics on an external table and use default sampling.
CREATE STATISTICS CustomerStats1 ON DimCustomer (CustomerKey, EmailAddress);
--Create statistics on an external table and scan all the rows
CREATE STATISTICS CustomerStats1 ON DimCustomer (CustomerKey, EmailAddress) WITH FULLSCAN;
E. FULLSCAN ve PERSIST_SAMPLE_PERCENT ile CREATE STATISTICS kullanma
Aşağıdaki örnek, tablonun ve EmailPromotion
sütunlarındaki Person
BusinessEntityID
tüm satırlar için istatistikleri oluşturur NamePurchase
ve sonraki tüm güncelleştirmeler için örnekleme yüzdesini açıkça belirtmeyen yüzde 100 örnekleme yüzdesini ayarlar.
CREATE STATISTICS NamePurchase
ON AdventureWorks2022.Person.Person (BusinessEntityID, EmailPromotion)
WITH FULLSCAN, PERSIST_SAMPLE_PERCENT = ON;
AdventureWorksDW veritabanının kullanıldığı örnekler
F. İki sütunda istatistik oluşturma
Aşağıdaki örnek, tablonun ve EmailAddress
sütunlarını DimCustomer
temel alarak CustomerKey
istatistikleri oluştururCustomerStats1
. İstatistikler, tablodaki Customer
satırların istatistiksel olarak önemli bir örneklemesi temel alınarak oluşturulur.
CREATE STATISTICS CustomerStats1 ON DimCustomer (CustomerKey, EmailAddress);
G. Tam tarama kullanarak istatistik oluşturma
Aşağıdaki örnek, tablodaki CustomerStatsFullScan
tüm satırları DimCustomer
tarayarak istatistikleri oluşturur.
CREATE STATISTICS CustomerStatsFullScan
ON DimCustomer (CustomerKey, EmailAddress) WITH FULLSCAN;
H. Örnek yüzdesini belirterek istatistik oluşturma
Aşağıdaki örnek, tablodaki satırların CustomerStatsSampleScan
yüzde 50'sini DimCustomer
tarayarak istatistikleri oluşturur.
CREATE STATISTICS CustomerStatsSampleScan
ON DimCustomer (CustomerKey, EmailAddress) WITH SAMPLE 50 PERCENT;
I. AUTO_DROP ile CREATE STATISTICS kullanma
Otomatik bırakma istatistiklerini kullanmak için, istatistikleri oluşturma veya güncelleştirme işleminin "WITH" yan tümcesine aşağıdakileri eklemeniz gerekir.
CREATE STATISTICS CustomerStats1 ON DimCustomer (CustomerKey, EmailAddress) WITH AUTO_DROP = ON
Mevcut istatistiklerde otomatik bırakma ayarını değerlendirmek için sys.stats içindeki sütunu kullanınauto_drop
:
SELECT object_id, [name], auto_drop
FROM sys.stats;