Sorgu performans geliştirme için istatistikleri'ni kullanma

sorgu iyileştiricisi istatistikleri, sorgu performansını sorgu planları oluşturmak için kullanır.Sorguların çoğu için sorgu iyileştiricisi, yüksek kaliteli bir sorgu planını gerekli istatistiklerini zaten oluşturur; birkaç durumda ek istatistikler oluşturmak en iyi sonucu almak için sorgu tasarımını değiştirmek gerekir.

Bu konu aşağıdaki kavramları açıklanır ve en iyi duruma getirme istatistikleri, etkin biçimde kullanma yönergeleri sorgu:

  • Sorgu iyileştirme istatistikleri nelerdir?

  • Veritabanı özel istatistikleri seçenekleri kullanma

  • Istatistikler oluşturmak zamanı belirleme

  • Istatistikleri güncelleştirmek zamanı belirleme

  • Istatistikleri verimli kullanma sorgu tasarlama

Sorgu planı ve nasıl sorgu performansı için ilişkili olduğu hakkında daha fazla bilgi için bkz: Bir sorgu çözümleniyor.

Sorgu iyileştirme istatistikleri nelerdir?

Sorgu en iyi duruma getirme için istatistikleri, bir tablo ya da dizinli görünüm, bir veya daha fazla sütundaki değerlerin dağıtım'hakkındaki istatistiksel bilgileri içeren nesneleridir.sorgu iyileştiricisi, tahmin etmek için bu istatistikleri kullanan önem düzeyiveya sorgu sonucu satır sayısı.Bu bölümler önem düzeyi tahminleri bir yüksek kalite sorgu planı oluşturmak sorgu iyileştiricisi etkinleştirin.Örneğin, sorgu iyileştiricisi önem kullanabilirsiniz dizini arama daha kaynak yoğun dizin tarama işleç yerine ve böylece işleç seçilecek tahminler, sorgu performansını artırmak.

Istatistikleri her bir nesnenin üzerinde bir veya daha çok tablo sütun listesi oluşturulur ve ilk sütunundaki değerler dağıtımını görüntüleme histogram içerir.Birden çok sütun istatistiklerinin nesnelerde, korelasyon sütunlar arasında bir değer hakkındaki istatistiksel bilgileri de depolar.Bu korelasyon istatistikler veya yoğunluğunu, sütun değerlerinin ayrı bir satır numarasından türetilir.Istatistik nesneler hakkında daha fazla bilgi için bkz: DBCC SHOW_STATISTICS (Transact-SQL).

Süzülmüş istatistikleri

Süzülmüş istatistikleri sorgu performansı iyi tanımlanmış veri kümelerine seçtiğiniz sorguları için artırabilirsiniz.Süzülmüş istatistikleri, bir süzgeç yüklemi istatistiklere dahil edilen verilerin alt küme küme kümesini seçmek için kullanın.Iyi tasarımlanmış süzülmüş istatistikleri tam-ile karşılaştırıldığında sorgu yürütme planı artırabilirsiniz tablo istatistikleri.Süzgeç yüklemi hakkında daha fazla bilgi için bkz: (Transact-SQL) STATISTICS CREATE. Süzülmüş bir istatistik oluştur ma hakkında daha fazla bilgi için bkz: Istatistikler oluşturmak zamanı belirleme Bu konu bölümünde.

Veritabanı özel istatistikleri seçenekleri kullanma

Ne anlamak için aşağıdaki veritabanı çapında istatistikleri seçenekleri yapın ve doğrulamak için uygun şekilde ayarlandıklarından önemlidir:

  • auto_create_statistics

  • auto_update_statistics

  • auto_update_statistics_async

AUTO_CREATE_STATISTICS seçeneğini kullanma

Otomatik istatistik seçeneği oluşturduğunuzda, AUTO_CREATE_STATISTICS, sorgu iyileştiricisi sorgu yüklemi, sorgu planı için önem düzeyi tahminleri geliştirmek gereken tek tek sütunlarda istatistikleri oluşturur açıktır.Bu tek sütunlu bir istatistik zaten varolan bir istatistik nesnesi bir çubuk grafik bulunmayan bir sütun oluşturulur.

sorgu iyileştiricisi sorgu doðrulama bir sütun için istatistikler oluşturduğu belirlemek için aşağıdaki sorguyu kullanabilirsiniz.Bu katalog görünümleri sys.stats ve sys.stats_columns veritabanı nesnesinin adını sütun adı ve istatistikleri adını tek sütunlu bir istatistik olan sütunların tümünü geri dönmek için sorgular.sorgu iyileştiricisi AUTO_CREATE_STATISTICS seçeneğini kullanarak sonucunda tek sütunlarda istatistikleri oluşturduğunda, istatistik adı ile başlayan _WA.

AUTO_CREATE_STATISTICS seçeneği için dizin oluşturulmuş istatistikleri olup olmadığını belirlemez.Bu seçenek, süzülmüş istatistiklerini de oluşturmaz.Kesinlikle tek sütunlu istatistiklerini tam tablosu için geçerlidir.

AUTO_UPDATE_STATISTICS seçeneğini kullanma

Zaman otomatik güncelleştirme istatistikleri AUTO_UPDATE_STATISTICS, seçeneği açıktır, sorgu iyileştiricisi için istatistikleri süresi geçmiş olabilir ve bir sorgu tarafından kullanılan daha sonra onları güncelleştirir belirler.-Of - out istatistikleri haline tarih sonra kadar ekleme tarih, silme veya operasyonları değiştirme tablo veya dizinli görünüm verileri dağıtım birleştirme.Ne zaman istatistikleri out - of - olabilir, sorgu iyileştiricisi belirler tarih sayısı, veri değişiklikleri bu yana son istatistikleri sayım tarafından tarih ve değişiklikler için bir eşik sayısı karşılaştırılıyor.dizinli görünüm veya Tablo satır sayısı eşiği dayanır.

sorgu iyileştiricisi çekler için out - of-tarih bir önbelleğe alınan sorgu planı'nı çalıştırmadan önce bir sorgunun derleme önce istatistikler.Bir sorgunun derleme önce sütunları, tablo, sorgu iyileştiricisi kullanır ve sorgu yüklemi, hangi istatistikleri belirlemek için dizin oluşturulmuş görünümler out - of - olabilir tarih.Önbelleğe alınan sorgu planı'nı çalıştırmadan önce Database Engine sorgu planı en - için - başvurduğu şemada doğrular tarih istatistikleri.

Dizinler, sorgu yüklemler, tek sütun için istatistikler nesneleri AUTO_UPDATE_STATISTICS seçeneği uygulanır ve oluşturulan istatistikleri İSTATİSTİK OLUŞTURUN deyim.Bu seçenek, süzülmüş istatistikleri için de geçerlidir.

Açık AUTO_CREATE_STATISTICS ve AUTO_UPDATE_STATISTICS seçenekleri için ayarlama

Otomatik istatistik seçeneğini AUTO_CREATE_STATISTICS, oluşturmak ve AUTO_UPDATE_STATISTICS, otomatik güncelleştirme istatistikleri seçeneği olan varsayılan olarak ve çoğu kullanıcı veritabanı için varsayılan kullanmanızı öneririz.Aşağıdaki SELECT kullanabileceğiniz deyim bu seçenekler tüm kullanıcı veritabanları için geçerli değerlerini görüntülemek için:

SELECT name AS "Name", 
    is_auto_create_stats_on AS "Auto Create Stats",
    is_auto_update_stats_on AS "Auto Update Stats",
    is_read_only AS "Read Only" 
FROM sys.databases
WHERE database_ID > 4;
GO

Aşağıdaki örnek AdventureWorks veritabanı için ON AUTO_CREATE_STATISTICS ve AUTO_UPDATE_STATISTICS ayarlar:

USE AdventureWorks;
GO
ALTER DATABASE AdventureWorks
    SET AUTO_CREATE_STATISTICS ON;
ALTER DATABASE AdventureWorks
    SET AUTO_UPDATE_STATISTICS ON;
GO

Hakkında daha fazla bilgi için küme bu istatistikleri seçenekleri Bkz: DATABASE küme seçenekleri (Transact-SQL) ALTER.

Devre dışı bırakma ve AUTO_UPDATE_STATISTICS için bazı istatistikler Re-enabling...

AUTO_UPDATE_STATISTICS açık olduğunda, veritabanı çapında istatistikleri güncelleştirme davranışı kılabilirsiniz ve küme tek tek bir tablo, dizin ya da sütun, uygulamanızın gerektirdiği için devre dışı otomatik istatistik güncelleştirir.AUTO_UPDATE_STATISTICS açık olduğunda, devre dışı bırakabilir ve tablo, dizin veya sütun otomatik istatistik güncelleştirmeleri aşağıdaki şekillerde yeniden etkinleştirin:

  • Use sp_autostats sistem saklı yordamı.Bu devre dışı bırakın veya bir tablo ya da dizin güncelleştirmeleri istatistiklerini yeniden etkinleştirin.

  • NORECOMPUTE seçeneğiyle belirtin İSTATİSTİKLERİ GÜNCELLEŞTİRME deyim.Yeniden etkinleştirmek için güncelleştirme istatistikleri NORECOMPUTE seçeneği olmadan güncelleştirme istatistikleri yeniden çalıştırın.

  • NORECOMPUTE seçeneğiyle belirtin İSTATİSTİK OLUŞTURUN deyim.Istatistikleri güncelleştirmeleri yeniden etkinleştirmek için , istatistikleri ile kaldırın. BIRAKMA İSTATİSTİKLERİ ve CREATE STATISTICS NORECOMPUTE seçeneği olmadan çalıştırın.

  • STATISTICS_NORECOMPUTE seçeneğiyle belirtin DİZİN OLUŞTURMA deyim.Istatistik güncelleştirmeleri yeniden etkinleştirmek için , çalıştırabilirsiniz DİZİN DEĞİŞTİR STATISTICS_NORECOMPUTE ile = OFF.

AUTO_UPDATE_STATISTICS değilken, otomatik güncelleştirmeleri için ayrı bir tablo, dizin ya da sütun ayarlanamaz.Otomatik istatistik güncelleştirmeleri yeniden AUTO_UPDATE_STATISTICS seçeneği ile belirtilen davranışı geri yükler.AUTO_UPDATE_STATISTICS seçeneği kapalıysa, istatistikleri güncelleştirme gerçekleşmeyecek.

Zaman uyumlu veya zaman uyumsuz istatistikleri güncelleştirme kullanılacağı durumlar

Istatistikleri güncelleştirme ya da olabilir zaman uyumlu (varsayılan) veya zaman uyumsuz.Zaman uyumlu istatistikleri güncelleştirmelerle, sorgularını her zaman derlemek ve yürütmek istatistikleri, güncel, güncel istatistikleri ile; sorgu iyileştiricisi derliyor ve Sorguyu yürütmeden önce güncelleştirilmiş istatistikleri bekler.Varolan istatistikleri out - of - bile, zaman uyumsuz istatistikleri uptarihs ile varolan istatistikleri ile sorgular derleme tarih; istatistikleri out - of - iseniz, sorgu iyileştiricisi suboptimal sorgu planına seçebilir tarih ne zaman sorgu derler.Zaman uyumsuz güncelleştirmeler tamamladıktan sonra derleme sorguları güncelleştirilmiş istatistikleri kullanmasını yararlı.

Veritabanı çapında zaman uyumsuz istatistik güncelleştirme seçeneğini AUTO_UPDATE_STATISTICS_ASYNC, sorgu iyileştiricisi zaman uyumlu veya zaman uyumsuz istatistikleri güncelleştirme kullanıp kullanmayacağını belirler.Varsayılan değer olarak, zaman uyumsuz istatistikleri güncelleştirme seçeneği kapalıdır ve sorgu iyileştiricisi istatistikleri zaman uyumlu olarak güncelleştirir.Dizinler, sorgu yüklemler, tek bir sütun için istatistikler nesneleri AUTO_UPDATE_STATISTICS_ASYNC seçeneği uygulanır ve oluşturulan istatistikleri İSTATİSTİK OLUŞTURUN ekstresi.

Tüm veritabanları için otomatik güncelleştirme zaman uyumsuz seçeneği görüntülemek için aşağıdaki komutu kullanın:

SELECT name AS "Name", 
    is_auto_update_stats_async_on AS "Asynchronous Update" 
FROM sys.databases;
GO

Aşağıdaki senaryo için zaman uyumlu istatistikleri'ni kullanarak göz önünde bulundurun:

  • Dağılımın bir tablo kesiliyor veya bir toplu güncelleştirme satırları daha büyük bir yüzdesini gibi veri değiştirme işlemleri atmış olursunuz.Değil yukarı, tarih eşzamanlı istatistiklerini kullanarak operaton, tamamlama istatistikleri sağlayacak sonra istatistik kurulumu-- üzeresiniz tarih değiştirilen veri sorguları yürütme önce.

Aşağıdaki senaryolar için daha öngörülebilir bir sorgu yanıt süreleri elde etmek için zaman uyumsuz istatistikleri'ni kullanmayı göz önünde bulundurun:

  • Uygulamanız, sık sık aynı sorguyu, benzer bir sorgu veya benzer önbelleğe alınan sorgu planlarını yürütür.sorgu iyileştiricisi güncel istatistiklerini beklemeden gelen sorgularını çalıştırabilirsiniz, sorgu yanıt süreleri daha öngörülebilir güncelleştirmelerle zaman uyumsuz istatistikleri eşzamanlı istatistikleri güncelleştirmelerle olabilir.Bu, bazı sorgular ve diğerlerini ertelenmesine neden engeller.Benzer sorgularını bulma hakkında daha fazla bilgi için bkz: Bulma ve benzer sorgular, sorgu ve Query kullanarak ayarlama sağlamalarını planlanır..

  • Uygulamanızın istemci isteği saat aşımı'ayarlarına güncelleştirilmiş istatistikleri için bekleyen bir veya daha fazla sorgulama neden karşılaştı.Bazı durumlarda, bekleyen saat uyumlu istatistik ısrarlı saat aşımı başarısız ayarlarına uygulamalar neden olabilir.

Istatistikler oluşturmak zamanı belirleme

sorgu iyileştiricisi, zaten istatistikleri aşağıdaki gibi oluşturur:

  1. Dizin oluşturulduğunda, tablo veya görünümlerin sorgu iyileştiricisi istatistiklerini dizinler oluşturur.Bu istatistikler, dizin anahtar sütunlarının üzerinde oluşturulur.Dizin süzülmüş bir dizindir, sorgu iyileştiricisi süzülmüş istatistikleri aynı alt küme küme süzülmüş dizini için belirtilen satır oluşturur.Süzülmüş dizinler hakkında daha fazla bilgi için bkz: Süzülmüş dizin tasarım yönergeleri ve INDIS (Transact-SQL) CREATE.

  2. sorgu iyileştiricisi AUTO_CREATE_STATISTICS açık olduğunda, sorgu yüklemler tek bir sütun için istatistikler oluşturur.

Sorguların çoğu için yüksek kaliteli sorgu planına istatistikler oluşturmak için bu iki yöntem olun; birkaç durumda ek istatistikleri ile oluşturarak sorgu planları artırabilirsiniz İSTATİSTİK OLUŞTURUN deyim.Bu ek istatistikleri, dizinler veya tek bir sütun için istatistikler oluşturduğunda, sorgu iyileştiricisi için hesap istatistiksel korelasyon yakalayabilirsiniz.Uygulamanızın ek istatistiksel korelasyon istatistikleri nesnesine hesaplanan, sorgu planları artırmak sorgu iyileştiricisi olanak veren,'de tablo verileri olabilir.Örneğin, süzülmüş veri satırların alt küme küme küme kümesini istatistik veya birden çok sütun istatistiklerinin sorgu doðrulama sütunlarda Sorgu planını artırmak.

Istatistikleri ile CREATE ISTATISTIKLERI oluştururken deyim, böylece düzenli olarak da doðrulama sütunları sorgu tek sütunlu istatistikler oluşturmak sorgu iyileştiricisi devam AUTO_CREATE_STATISTICS seçeneği tutulması önerilir.Sorgu yüklemler hakkında daha fazla bilgi için bkz: Arama koşulu (Transact-SQL).

Aşağıdakilerden herhangi birini kaybettiğinde, istatistikleri STATISTICS CREATE deyimiyle oluşturmayı göz önünde bulundurun:

  • The Database Engine Tuning Advisor suggests creating statistics.

  • Sorgu yüklemi değil aynı dizinde bulunan birden çok ilişkili sütun içerir.

  • Sorgu verisinin bir altkümesini seçer.

  • Istatistik eksik sorgu vardır.

Veritabanı Altyapısı Tuning Advisor istatistikleri oluşturma önerir.

The Database Engine Tuning Advisor is a a araç that analyzes the performance effects of workloads on one or more databases. Bu, (örneğin, dizinler oluşturmak için önerme), performansı geliştirmek için öneriler sunar ve sorgu en iyi duruma getirme istatistikler oluşturmak için CREATE STATISTICS kullanarak önerebilir.Bu öneri başvurmalıdır.Hakkında daha fazla bilgi için Database Engine Advisor ayarlama, bkz: Fiziksel veritabanı tasarımını ayarlama.

Sorgu çok doğrulama içeren sütunlar Correlated...

Bir sorgu yüklemi çapraz sütun ilişkileri ve bağımlılıkları olan birden çok sütun içeriyorsa, birden çok sütun istatistik sorgu planı geliştirin.Birden çok sütun için istatistikler adlı geçici sütun korelasyon istatistikleri içerir. yoğunluğunu, tek sütunlu istatistikleri kullanılamaz.Sorgu sonuçlar arasında birden çok sütun veri ilişkileri bağlı olduğunda, yoğunluğunu önem düzeyi tahminleri artırabilirsiniz.

Sütunları aynı dizin içinde varsa, birden çok sütun istatistiklerinin nesne zaten var ve el ile oluşturmak gerekli değildir.Sütunlar zaten aynı dizinde bulunmayan, birden çok sütun istatistiklerinin sütunların dizin oluşturma veya STATISTICS CREATE deyim kullanarak oluşturabilirsiniz.Farklı bir istatistik nesnesi dizin korumak için daha fazla sistem kaynağı gerekir.Uygulama, birden çok sütun dizini gerektirmiyorsa, sistem kaynaklarının dizini oluşturmadan istatistik nesnesi oluşturarak economize.

Birden çok sütun istatistiklerinin oluştururken, istatistik nesnesi tanımında sütunların düzenini yönelik önem düzeyi tahminleri yoğunluğunu verimliliğini etkiler.Istatistik nesnesi yoğunluğunu anahtar sütunlarının her bir önek için istatistik nesnesi tanımında depolar.Yoğunluğunu hakkında daha fazla bilgi için bkz: DBCC SHOW_STATISTICS (Transact-SQL).

Önem düzeyi tahminleri için faydalı yoğunluğunu oluşturmak için , sorgu doğrulamasını sütunlarda istatistik nesnesi tanımında bir sütun önekleri birini eşleşmesi gerekir.Örneğin, aşağıdaki bir birden çok sütun istatistiklerinin sütunların oluşturur LastName, MiddleName, ve FirstName.

USE AdventureWorks;
GO
IF EXISTS (SELECT name FROM sys.stats
    WHERE name = 'LastFirst'
    AND object_ID = OBJECT_ID ('Person.Contact'))
DROP STATISTICS Person.Contact.LastFirst;
GO
CREATE STATISTICS LastFirst ON Person.Contact (LastName, MiddleName, FirstName);
GO

Bu örnekte istatistik nesnesi LastFirst Aşağıdaki sütun önekleri için yoğunluğunu vardır: (LastName), (LastName, MiddleName) ve ()LastName, MiddleName, FirstName). Yoğunluğu () için kullanılabilir değil.LastName, FirstName). Sorgu kullanıyorsa LastName ve FirstName kullanmadan MiddleName, yoğunluk önem düzeyi tahminleri için kullanılamaz.

Alınan verilerin alt küme küme küme sorgu seçer

sorgu iyileştiricisi için tek bir sütun ve dizin istatistikleri oluşturduğunda, tüm satırlarda değerleri ile ilgili istatistikleri oluşturur.Satırların alt küme küme küme sorgular'ı seçin, ve bu alt küme küme satır benzersiz veri dağılımın varsa, süzülmüş istatistikleri sorgu planları artırabilirsiniz.Süzgeç ifade doðrulama tanımlamak için WHERE yan tümce ile STATISTICS CREATE ifade kullanarak filtre uygulanmış istatistiklerini oluşturabilirsiniz.

Örneğin, kullanma AdventureWorks, her ürüne Production.Product tablo the Production.ProductCategory içinde dört kategoriden birine ait tablo: Bisikleti bileşenleri, elbise ve Donatılar. Her kategorinin, farklı verileri bir ağırlık dağıtıma vardır: bisiklet ağırlıkları arasındadır 13.77 30.0, bileşen ağırlıkları arasındadır 2.12 1050.00 bazı NULL değerleri olan tüm BOş ve Donatı ağırlıklarını da NULL olan giysisinin ağırlıkları var.

Bisikletler örnek olarak kullanarak, tüm bisikleti ağırlıkları süzülmüş istatistikleri, sorgu iyileştiricisi için daha doğru istatistikler sağlar ve tam tablo istatistiklerinin veya varolmayan Ağırlık sütun istatistikleri karşılaştırma sorgu planı kalitesi artabilir.Ağırlık arama sayısı görece küçük bisikleti Ağırlık sütun süzülmüş istatistikleri için iyi bir aday ancak şart değil süzülmüş bir dizin için iyi bir aday ise.Süzülmüş bir dizin veritabanına eklemek için depolama maliyetini ve ek bakım outweigh, süzülmüş bir dizin sağlayan aramaları için performans sağlarlar.

Aşağıdaki deyim oluşturur BikeWeights tüm alt kategorileri'Bisikletleri için süzülmüş istatistikler. Süzülmüş doðrulama ifade ile karşılaştırma bisikleti kategorilerini tüm numaralandırma bisikleti tanımlar. Production.ProductSubcategoryID IN (1,2,3). Yüklemi Bisikletleri kategori adını kullanamazsınız, çünkü bu Production.ProductCategory tablosunda depolanan ve süzgeç ifadesinde tüm sütunlar aynı tabloda olması gerekir.

sorgu iyileştiricisi kullanabilmek için BikeWeights istatistikleri, tüm, daha fazla değerlendirilecek bisikleti seçer aşağıdaki sorgu için Sorgu planını artırmanın süzülmüş daha 25.

SELECT P.Weight AS Weight, S.Name AS BikeName
FROM Production.Product AS P
    JOIN Production.ProductSubcategory AS S 
    ON P.ProductSubcategoryID = S.ProductSubcategoryID
WHERE P.ProductSubcategoryID IN (1,2,3) AND P.Weight > 25
ORDER BY P.Weight;
GO

Sorgu istatistikleri eksik olabilir.

Hata veya başka bir olayı sorgu iyileştiricisi istatistikleri oluşturmasını engeller, istatistikler'i kullanmadan sorgu iyileştiricisi sorgu planı oluşturur.sorgu iyileştiricisi istatistikleri eksik olarak işaretler ve istatistikleri sorgu yürütüldükten sonraki sefer yeniden dener.

Eksik istatistikleri uyarılarla belirtilir (kırmızı metin, tablo adı) sorgu yürütme planı grafik kullanarak görüntülendiğinde SQL Server Management Studio. Daha fazla bilgi için bkz:Grafik yürütme görüntüleme (SQL Server Management Studio'yu) planları..Ayrıca, izleme sütun statistics eksik kullanarak olay sınıfıSQL Server Profiler istatistik eksik olduğunu gösterir. Daha fazla bilgi için bkz:Hata ve uyarılarını olay kategorisi (Veritabanı Altyapısı).

Istatistik eksikse, aşağıdaki adımları gerçekleştirin:

  • AUTO_CREATE_STATISTICS ve AUTO_UPDATE_STATISTICS üzerinde olduğundan emin olun.

  • Veritabanı salt okunur olmadığından emin olun.Veritabanı salt okunur ise, sorgu iyileştiricisi istatistikleri kaydedemiyor.

  • Eksik istatistikleri STATISTICS CREATE deyim kullanarak oluşturun.

Istatistikleri güncelleştirmek zamanı belirleme

Ne zaman istatistikleri out - of - olabilir, sorgu iyileştiricisi belirler tarih ve sonra bunları bir sorgu için gerektiğinde uptarihs planlayın.Bazı durumlarda Sorgu planını geliştirmek ve bu nedenle, daha fazla istatistik sık AUTO_UPDATE_STATISTICS açık olduğunda gerçekleşmesi daha güncelleştirerek sorgu performansını artırmak.Istatistikler, güncelleştirme istatistikleri deyim veya depolanmış yordam sp_updatestats ile güncelleştirebilirsiniz.

kullanıcı_adıGeri yükleme işlemini gerçekleştiren kullanıcının adıdır.backup_set_idyedek tanımlayan benzersiz bir kimlik numarası küme geri yükleniyor.

Istatistik güncelleştirme istatistikleri veya sp_updatestats ile güncelleştirilirken ON olarak ayarlayabilir, böylece sorgu iyileştiricisi istatistiklerini düzenli olarak güncelleştirmeye devam AUTO_UPDATE_STATISTICS tutulması önerilir.sütun, Dizin, tablo veya dizinli görünüm güncelleştirme istatistikleri hakkında daha fazla bilgi için bkz: güncelleştirme istatistikleri (Transact-SQL). Saklı yordam veritabanındaki tüm kullanıcı tanımlı ve iç tablolar için güncelleştirme istatistikleri hakkında daha fazla bilgi için bkz sp_updatestats (Transact-SQL). DERLEME DEĞİŞTİRME

EXEC sp_updatestats

Istatistiklerin en son güncelleştirildiği belirlemek için stats_date işlev.

Aşağıdaki durumları için istatistikleri güncelleştirme göz önünde bulundurun:

  • Sorgu yürütme süreleri yavaştır.

  • Ekleme işlemi, anahtar sütunlarının azalan veya artan oluşur.

  • Sonra bakım işlemleri.

Sorgu yürütme zamanları yavaş

Sorgu yanıt süreleri yavaş veya öngörülemeyen, sorguları - için - sağlamak tarih ek sorun giderme adımları gerçekleştirmeden önce istatistikleri.Yavaş çalışan sorgularda sorun giderme hakkında daha fazla bilgi için bkz: Yavaş çalışan sorgularda çözümleme için Denetim listesi.

Ekleme işlemi için anahtar sütunları azalan veya artan oluşuyor

Anahtar sütunları, IDENTITY veya gerçek zamanlı bir saat damgası sütunları azalan veya artan hakkında istatistikleri, sorgu iyileştiricisi gerçekleştiren birden daha sık istatistikleri güncelleştirme gereksinim duyabilir.Ekleme işlemi, sütunları azalan veya artan için yeni değerler ekleyin.Eklenen satır sayısı, bir istatistik güncelleştirme tetiklemek için çok küçük olabilir.Istatistikler, güncel olmayan ve sorguları en son eklenen satırları seçin, geçerli istatistiklerini bu yeni değerler için önem düzeyi tahminleri yoktur.Bu, hatalı önem düzeyi tahminleri ve yavaş sorgu performansı neden olabilir.

En son tarihlerini satış siparişi için önem düzeyi tahminleri dahil etmek için istatistikleri güncelleştirilir, en son satış siparişinin tarihleri seçtiği bir sorgu hatalı önem düzeyi tahminleri olacaktır.

Sonra bakım işlemi

Dağılımın kesiliyor gibi veri değiştirme bakım yordamlarını gerçekleştirdikten sonra istatistikleri güncelleştirme göz önünde bir tablo veya büyük bir yüzdesini satırları, bir toplu ekleme işlemi.Bu işlem, sorgularda otomatik istatistik güncelleştirmelerinde beklerken sorgu işleme, gelecekteki gecikmeler kurtulabilirsiniz.

Yeniden oluşturma gibi işlemleri birleştirme veya dizin yeniden düzenleme değil değiştirmek veri dağıtımını.Bu nedenle, ALTER DIZINI yeniden OLUşTURMAK, DBCC ANDA, DBCC INDEXDEFRAG veya ALTER INDIS yeniden DÜZENLEME işlemleri gerçekleştirdikten sonra güncelleştirme istatistikleri gerekmez.Ancak bir tabloyu veya görünümü ALTER DIZINI yeniden OLUşTURMAK veya DBCC DBREINDEX, dizini yeniden oluşturduğunuzda, sorgu iyileştiricisi istatistiklerini güncelleştirir; bu istatistikler, dizini yeniden bir byproduct güncelleştirmesidir.sorgu iyileştiricisi istatistikleri DBCC INDEXDEFRAG veya ALTER INDIS yeniden DÜZENLEME işlemleri sonra güncelleştirmez.

Tasarım kısımlarına kullanım istatistikleri verimli sorgular

Yerel değişkenler ve karmaşık bir sorgu yüklemi, deyimlerde gibi belirli bir sorgu uygulamaları suboptimal sorgu planları için yol açabilir.Bunu önlemek için istatistikleri etkin biçimde kullanmak için sorgu tasarım yönergeleri izleyerek sağlayabilirsiniz.Sorgu yüklemler hakkında daha fazla bilgi için bkz: Arama koşulu (Transact-SQL).

Sorgu planları istatistiklerini artırmak için etkin biçimde kullanmak, sorgu tasarım yönergeleri uygulayarak artırabilir önem düzeyi tahminleri sorgu yüklemler içinde kullanılan fonksiyonlarda ifadeler ve değişkenler için.sorgu iyileştiricisi bir ifade, değişken veya işlevin değerini biliyorsanız, hangi değerin histogram araması gerektiğini biliyor ve bu nedenle, histogram önem düzeyi en iyi tahmin alamıyor.Bunun yerine, sorgu iyileştiricisi önem düzeyi tahmini ortalama histogram örneklenen satırları için farklı bir değer başına satır sayısı dayandırır.Bu işlem, suboptimal önem düzeyi tahminleri için müşteri adayları ve sorgu performansı zararı.

Aşağıdaki yönergeler, sorgular sorgu planları önem düzeyi tahminleri geliştirerek artırmak için yazma açıklanmıştır.

Ifadeler için önem düzeyi tahminleri artırma

Ifadeler için önem düzeyi tahminleri artırmak için , aşağıdaki yönergeleri izleyin:

  • Mümkün olduğunda, bunları sabit deyimlerle basitleştirin.sorgu iyileştiricisi tüm işlevler ve önem düzeyi tahminleri belirlemek için önce sabit içeren ifadeleri değerlendirileceği değil.Örneğin, MUTLAK (ifade basitleştirin.-100) to 100.

  • Deyimde birden fazla değişken kullanılıyorsa, hesaplanan sütun için ifade oluşturmayı düşünün ve sonra hesaplanan sütunu istatistikler veya bir dizin oluşturun.Örneğin, sorgu doğrulamasını WHERE PRICE + Tax > 100 hesaplanan sütun için ifade oluşturursanız, daha iyi bir önem düzeyi tahmini olabilir Price + Tax.

Değişken ve işlevler için önem düzeyi tahminleri artırma

Önem düzeyi tahminleri değişkenleri ve işlevlerini artırmak için , aşağıdaki yönergeleri izleyin:

  • Sorgu yüklemi, yerel bir değişken kullanılıyorsa, yerine yerel bir değişken parametre kullanmak için sorgu tekrar deneyin.Sorgu yürütme planı sorgu iyileştiricisi oluşturduğunda, yerel bir değişken değeri verilir.Bir sorguya bir parametre kullandığında, sorgu iyileştiricisi için geçirilen ilk gerçek parametre değeri için önem düzeyi tahmini kullanır saklı yordam.

  • Standart bir tablo veya geçici tablo, tablo değerli multi-deyim fonksiyonların sonuçlar olarak tutulacağı kullanmayı düşünün.sorgu iyileştiricisi multi-deyim tablo değerli işlevler için istatistikleri oluşturun.Bu yaklaşım sorgu iyileştiricisi tablo sütunları hakkında istatistikler oluşturmak ve bunları daha iyi bir sorgu planı oluşturmak için kullanabilirsiniz.Multi-deyim tablo değerli işlevler hakkında daha fazla bilgi için bkz: Işlevler türleri.

  • Standart bir tablo veya geçici tablo yeni bir tablo değişkenleri için'kullanmayı düşünün.sorgu iyileştiricisi istatistiklerini Tablo değişkenlerini oluşturun.Bu yaklaşım sorgu iyileştiricisi tablo sütunları hakkında istatistikler oluşturmak ve bunları daha iyi bir sorgu planı oluşturmak için kullanabilirsiniz.geçici tablo veya bir tablo değişkeni kullanılıp kullanılmayacağını belirleme bileşimleri vardır; saklı yordamlarda kullanılan tablo değişkenleri geçici tablolar'den daha az yeniden saklı yordam neden.Uygulamaya bağlı olarak, geçici tablo yerine bir tablo değişkeni kullanarak performansı değil.

  • Bir saklı yordamın geçirilen bir parametresi kullanan bir sorgu içeriyorsa, sorguda kullanmadan önce saklı yordam içindeki parametre değeri değiştirme kaçının.Sorgu için önem düzeyi tahminleri geçirildi, parametre değeri ve güncelleştirilmiş değere dayanır.Parametre değeri değiştirme önlemek için , iki saklı yordamda kullanmak için bir sorgu yazabilirsiniz.

    Örneğin, aşağıdaki saklı yordamını Sales.GetRecentSales parametre değeri değiştiğinde @date ne zaman @date is NULL.

    USE AdventureWorks;
    GO
    IF OBJECT_ID ( 'Sales.GetRecentSales', 'P') IS NOT NULL
        DROP PROCEDURE Sales.GetRecentSales;
    GO
    CREATE PROCEDURE Sales.GetRecentSales (@date datetime)
    AS BEGIN
        IF @date is NULL
            SET @date = DATEADD(MONTH, -3, (SELECT MAX(ORDERDATE) FROM Sales.SalesOrderHeader))
        SELECT * FROM Sales.SalesOrderHeader h, Sales.SalesOrderDetail d
        WHERE h.SalesOrderID = d.SalesOrderID
        AND h.OrderDate > @date
    END
    GO
    

    saklı yordam ilk çağrısı Sales.GetRecentSales NULL geçirmeden @date parametre, sorgu iyileştiricisi için önem düzeyi tahmini saklı yordamını derleme @date = NULL rağmen sorgu doğrulamasını çağrılır. @date = NULL. Bu önem düzeyi tahmini, fiili sorgu sonucu satır sayısından önemli ölçüde farklı olabilir.Sonuç olarak, sorgu iyileştiricisi bir suboptimal sorgu planı da seçebilirsiniz.Bunu önlemek için , size saklı yordam iki yordam gibi yazabilirsiniz:

    USE AdventureWorks;
    GO
    IF OBJECT_ID ( 'Sales.GetNullRecentSales', 'P') IS NOT NULL
        DROP PROCEDURE Sales.GetNullRecentSales;
    GO
    CREATE PROCEDURE Sales.GetNullRecentSales (@date datetime)
    AS BEGIN
        IF @date is NULL
            SET @date = DATEADD(MONTH, -3, (SELECT MAX(ORDERDATE) FROM Sales.SalesOrderHeader))
        EXEC Sales.GetNonNullRecentSales @date;
    END
    GO
    IF OBJECT_ID ( 'Sales.GetNonNullRecentSales', 'P') IS NOT NULL
        DROP PROCEDURE Sales.GetNonNullRecentSales;
    GO
    CREATE PROCEDURE Sales.GetNonNullRecentSales (@date datetime)
    AS BEGIN
        SELECT * FROM Sales.SalesOrderHeader h, Sales.SalesOrderDetail d
        WHERE h.SalesOrderID = d.SalesOrderID
        AND h.OrderDate > @date
    END
    GO
    

Query ipuçları önem düzeyi tahminleri artırma

Yerel değişkenler için önem düzeyi tahminleri artırmak için , veya BILINMEYEN IÇIN en iyi duruma GETIRME en iyi duruma GETIRMEK IÇIN sorgu ipuçları RECOMPILE ile kullanabilirsiniz.Daha fazla bilgi için bkz:Sorgu ipuçları (Transact-SQL).

Bazı uygulamalar, onu çalıştırır, her sorgu recompiling çok fazla saat alabilir.En iyi duruma GETIRICISI IÇIN sorgu ipucu RECOMPILE seçeneğini kullanmadığınız bile yardımcı olabilir.Örneğin, belirli tarih belirtmek için Sales.GetRecentSales saklı yordam için en iyi duruma GETIRICISI IÇIN bir seçenek ekleyebilirsiniz.Aşağıdaki örnekte, en iyi duruma GETIRMEK IÇIN seçenek Sales.GetRecentSales yordamına ekler.

USE AdventureWorks;
GO
IF OBJECT_ID ( 'Sales.GetRecentSales', 'P') IS NOT NULL
    DROP PROCEDURE Sales.GetRecentSales;
GO
CREATE PROCEDURE Sales.GetRecentSales (@date datetime)
AS BEGIN
    IF @date is NULL
        SET @date = DATEADD(MONTH, -3, (SELECT MAX(ORDERDATE) FROM Sales.SalesOrderHeader))
    SELECT * FROM Sales.SalesOrderHeader h, Sales.SalesOrderDetail d
    WHERE h.SalesOrderID = d.SalesOrderID
    AND h.OrderDate > @date
    OPTION ( OPTIMIZE FOR ( @date = '2004-05-01 00:00:00.000'))
END;
GO

Önem düzeyi tahminleri planı kılavuzları artırma

Bazı uygulamalar, çok fazla recompiles RECOMPILE sorgu ipucu kullanarak olabilir ya da sorguyu değiştiremezsiniz çünkü yönergeleri uygulanabilir bir sorgu tasarımını neden.Plan kılavuzları, KULLANÝN uygulama değişiklikleri uygulama satıcısı ile araştırma yaparken, sorgunun davranışını denetlemek için PLAN gibi diğer ipuçlarını belirtmek için kullanabilirsiniz.Plan kılavuzları hakkında daha fazla bilgi için bkz: Plan kılavuzları kullanarak sorguları, dağıtılmış uygulamaları en iyi duruma getirme.

Değişiklik Geçmişi

Güncelleştirilmiş içerik

Etkin istatistikler hakkında güncel bilgi içerecek şekilde tüm konusunu rewrote.