UPDATE STATISTICS (Transact-SQL)

Bir tablo veya dizinli görünümdeki sorgu iyileştirme istatistiklerini güncelleştirir. Varsayılan olarak sorgu iyileştirici, sorgu planını iyileştirmek için istatistikleri gerektiğinde zaten güncelleştirir; bazı durumlarda, istatistikleri varsayılan güncelleştirmelerden daha sık güncelleştirmek üzere UPDATE STATISTICS'i veya sp_updatestats saklı yordamını kullanarak sorgu performansını iyileştirebilirsiniz.

İstatistikleri güncelleştirmek sorguların güncel istatistiklerle derlenmesini garantiler. Ancak istatistikleri güncelleştirmek sorguların yeniden derlenmesine neden olur. Sorgu planlarını iyileştirmekle sorguları yeniden derlemenin aldığı süre arasında bir karşılıklı denge olduğundan istatistikleri çok sık güncelleştirmemenizi öneririz. Özgül dengeler uygulamanıza bağlıdır. UPDATE STATISTICS, istatistikleri oluşturmak üzere satır örneklemini sıralamak için tempdb veritabanını kullanabilir.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

UPDATE STATISTICS table_or_indexed_view_name 
    [ 
        { 
            { index_or_statistics__name }
          | ( { index_or_statistics_name } [ ,...n ] ) 
                }
    ] 
    [    WITH 
        [ 
            FULLSCAN 
            | SAMPLE number { PERCENT | ROWS } 
            | RESAMPLE 
            | <update_stats_stream_option> [ ,...n ]
        ] 
        [ [ , ] [ ALL | COLUMNS | INDEX ] 
        [ [ , ] NORECOMPUTE ] 
    ] ;

<update_stats_stream_option> ::=
    [ STATS_STREAM = stats_stream ]
    [ ROWCOUNT = numeric_constant ]
    [ PAGECOUNT = numeric_contant ]

Bağımsız değişkenler

  • table_or_indexed_view_name
    İstatistikleri güncelleştirilecek tablo veya dizinli görünümün adıdır.

  • index_or_statistics_name
    İstatistikleri güncelleştirilecek dizinin veya güncelleştirilecek istatistiklerin adıdır. index_or_statistics_name belirtilmezse, sorgu iyileştirici, tablonun veya dizinli görünümün tüm istatistiklerini güncelleştirir. Bu, CREATE STATISTICS deyimi kullanılarak oluşturulan istatistikleri, AUTO_CREATE_STATISTICS açık olduğunda oluşturulan istatistikleri ve dizinler için oluşturulmuş istatistikleri içerir.

    AUTO_CREATE_STATISTICS hakkında daha fazla bilgi için, bkz. alter database set seçenekleri (Transact-sql). Bir tablo veya görünümün tüm dizinlerini görüntülemek için, sp_helpindex'i kullanabilirsiniz.

  • FULLSCAN
    Tablo veya dizinli görünümdeki tüm satırları tarayarak istatistikleri hesaplayın. FULLSCAN ve SAMPLE 100 PERCENT aynı sonuçları verir. FULLSCAN, SAMPLE seçeneği ile kullanılamaz.

  • SAMPLE number { PERCENT | ROWS }
    İstatistikleri güncelleştirirken sorgu iyileştiricinin kullanması için tablo veya dizinli görünümdeki yaklaşık yüzdeyi veya satır sayısını belirtir. PERCENT'te number ROWS için 0 ile 100 arasında olabilir, number 0'dan toplam satır sayısına kadar olabilir. Sorgu iyileştiricinin örneklediği gerçek yüzde veya satır sayısı, belirtilen yüzde veya sayı ile eşleşmeyebilir. Örneğin, sorgu iyileştirici bir veri sayfasındaki tüm satırları tarar.

    SAMPLE, sorgu planının varsayılan örneklemeye göre en iyisi olmadığı özel durumlarda yararlıdır. Çoğu durumda, sorgu iyileştirici örnekleme kullandığı ve istatistik olarak anlamlı örnek boyutunu, nitelikli sorgu planları oluşturmak bunu gerektirdiğinden varsayılan olarak belirlediği için, SAMPLE değerini belirtmek gerekmez.

    SAMPLE, FULLSCAN seçeneği ile birlikte kullanılamaz. SAMPLE ya da FULLSCAN belirtilmediğinde, sorgu iyileştirici, varsayılan olarak örnek verileri kullanır ve örnek boyutunu hesaplar.

    0 PERCENT veya 0 ROWS belirtmemenizi öneririz. 0 PERCENT veya ROWS belirtilirse, istatistik nesne güncelleştirilir ancak istatistik verilerini içermez.

  • RESAMPLE
    Her istatistiği en son örnekleme oranını kullanarak güncelleştirin.

    RESAMPLE'ı kullanmak tüm tablonun taranmasıyla sonuçlanabilir. Örneğin dizinlerin istatistikleri örnekleme oranları için bir tam tablo taraması kullanır. Örnek seçeneklerinden (SAMPLE, FULLSCAN, RESAMPLE) hiçbiri belirtilmediğinde, sorgu iyileştirici verilerden örnek alır ve varsayılan olarak örnek boyutunu hesaplar.

  • ALL | COLUMNS | INDEX
    Var olan, bir veya daha fazla sütun hakkında veya dizinler için oluşturulmuş tüm istatistikleri güncelleştirir. Seçeneklerden hiçbiri belirtilmezse, UPDATE STATISTICS deyimi tablo veya dizinli görünüm hakkındaki tüm istatistikleri güncelleştirir.

  • NORECOMPUTE
    Otomatik istatistik güncelleştirme için olan AUTO_UPDATE_STATISTICS seçeneğini belirtilen istatistik için devre dışı bırak. Bu seçenek belirtilirse, sorgu iyileştirici bu istatistik güncelleştirmeyi tamamlar ve gelecek güncelleştirmeleri devre dışı bırakır.

    AUTO_UPDATE_STATISTICS seçeneği davranışını yeniden etkinleştirmek için UPDATE STATISTICS'i NORECOMPUTE seçeneği olmadan yeniden çalıştırın veya sp_autostats yordamını çalıştırın.

    Dikkat notuDikkat

    Bu seçeneği kullanmak en iyi olmayan sorgu planları üretebilir. Bu seçeneğin tutumlu olarak ve yalnızca yetkin bir sistem yöneticisi tarafından kullanılmasını öneririz.

    AUTO_STATISTICS_UPDATE seçeneği hakkında daha fazla bilgi için bkz. alter database set seçenekleri (Transact-sql).

  • <update_stats_stream_option>
    Yalnızca bilgi amaçlı olarak belirtilmiştir. Desteklenmez. Gelecekteki uyumluluk garanti edilmez.

Açıklamalar

UPDATE STATISTICS Ne Zaman Kullanılmalı

UPDATE STATISTICS seçeneğinin ne zaman kullanılacağı hakkında daha fazla bilgi için bkz. İstatistikler.

Tüm İstatistikleri sp_updatestats ile Güncelleştirme

Veritabanındaki tüm kullanıcı tanımlı ve dahili tabloların istatistiklerinin nasıl güncelleştirileceği hakkında daha fazla bilgi için sp_updatestats (Transact-sql) saklı yordamına bakın. Örneğin aşağıdaki komut veritabanının tüm istatistiklerini güncelleştirmek için sp_updatestats yordamını çağırır.

EXEC sp_updatestats;

EXEC sp_updatestats;

Son İstatistik Güncelleştirmesini Belirleme

İstatistiklerin en son ne zaman güncelleştirildiğini belirlemek için STATS_DATE işlevini kullanın.

İzinler

Tablo veya görünümde ALTER izni gerektirir.

Örnekler

A.Tablodaki tüm istatistikleri güncelleştirme

Aşağıdaki örnek SalesOrderDetail tablosunun tüm dizinlerinin istatistiklerini güncelleştirmektedir.

USE AdventureWorks2012;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO

B.Dizinin istatistiklerinin güncelleştirme

Aşağıdaki örnek, SalesOrderDetail tablosunun AK_SalesOrderDetail_rowguid dizininin istatistiklerini güncelleştirmektedir.

USE AdventureWorks2012;
GO
UPDATE STATISTICS Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid;
GO

C.İstatistikleri yüzde ellilik 50 örnekleme kullanarak güncelleştirme

Aşağıdaki örnek, Product tablosundaki Name ve ProductNumber sütunlarını istatistiklerinin oluşturup sonra bunları güncelleştirmektedir.

USE AdventureWorks2012;
GO
CREATE STATISTICS Products
    ON Production.Product ([Name], ProductNumber)
    WITH SAMPLE 50 PERCENT
-- Time passes. The UPDATE STATISTICS statement is then executed.
UPDATE STATISTICS Production.Product(Products) 
    WITH SAMPLE 50 PERCENT;

D.İstatistikleri FULLSCAN ve NORECOMPUTE kullanarak güncelleştirme

Aşağıdaki örnek Product tablosundaki Products istatistiklerini güncelleştirmekte, Product tablosunun tüm satırlarını tam olarak taranmaya zorlamakta ve Products istatistiklerinin otomatik istatistiklerini kapatmaktadır.

USE AdventureWorks2012;
GO
UPDATE STATISTICS Production.Product(Products)
    WITH FULLSCAN, NORECOMPUTE;
GO

Ayrıca bkz.

Başvuru

alter veritabanı (Transact-sql)

İstatistikler (Transact-sql) oluştur

dbcc SHOW_STATISTICS (Transact-sql)

İstatistikler (Transact-sql) bırak

sp_autostats (Transact-sql)

sp_updatestats (Transact-sql)

stats_date (Transact-sql)

Kavramlar

İstatistikler