Delen via


STATISTIEKEN BIJWERKEN (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricWarehouse in Microsoft FabricSQL-database in Microsoft Fabric

Hiermee werkt u queryoptimalisatie bij statistieken in een tabel of geïndexeerde weergave. Standaard werkt de optimalisatiefunctie voor query's statistieken zo nodig bij om het queryplan te verbeteren; in sommige gevallen kunt u de queryprestaties verbeteren met behulp van UPDATE STATISTICS of de opgeslagen procedure sp_updatestats om statistieken vaker bij te werken dan de standaardupdates.

Het bijwerken van statistieken zorgt ervoor dat query's worden gecompileerd met up-to-datumstatistieken. Het bijwerken van statistieken via elk proces kan ertoe leiden dat queryplannen automatisch opnieuw worden gecompileren. Het is raadzaam om statistieken niet te vaak bij te werken, omdat er sprake is van een compromis tussen het verbeteren van queryplannen en de tijd die nodig is om query's opnieuw te compileren. De specifieke afwegingen zijn afhankelijk van uw toepassing. UPDATE STATISTICS kunt tempdb gebruiken om het voorbeeld van rijen te sorteren voor het maken van statistieken.

Notitie

Zie Statistieken in Microsoft Fabricvoor meer informatie over statistieken in Microsoft Fabric.

Transact-SQL syntaxisconventies

Syntaxis

-- Syntax for SQL Server and Azure SQL Database  
  
UPDATE STATISTICS table_or_indexed_view_name   
    [   
        {   
            { index_or_statistics__name }  
          | ( { index_or_statistics_name } [ ,...n ] )   
                }  
    ]   
    [    WITH   
        [  
            FULLSCAN   
              [ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]    
            | SAMPLE number { PERCENT | ROWS }   
              [ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]    
            | RESAMPLE   
              [ ON PARTITIONS ( { <partition_number> | <range> } [, ...n] ) ]  
            | <update_stats_stream_option> [ ,...n ]  
        ]   
        [ [ , ] [ ALL | COLUMNS | INDEX ]   
        [ [ , ] NORECOMPUTE ]   
        [ [ , ] INCREMENTAL = { ON | OFF } ] 
        [ [ , ] MAXDOP = max_degree_of_parallelism ]
        [ [ , ] AUTO_DROP = { ON | OFF } ]
    ] ;  
  
<update_stats_stream_option> ::=  
    [ STATS_STREAM = stats_stream ]  
    [ ROWCOUNT = numeric_constant ]  
    [ PAGECOUNT = numeric_constant ]  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse 
  
UPDATE STATISTICS [ schema_name . ] table_name   
    [ ( { statistics_name | index_name } ) ]  
    [ WITH   
       {  
              FULLSCAN   
            | SAMPLE number PERCENT   
            | RESAMPLE   
        }  
    ]  
[;]  
-- Syntax for Microsoft Fabric

UPDATE STATISTICS [ schema_name . ] table_name   
    [ ( { statistics_name } ) ]  
    [ WITH   
       {  
              FULLSCAN   
            | SAMPLE number PERCENT   
        }  
    ]  
[;]  

Notitie

Deze syntaxis wordt niet ondersteund door een serverloze SQL-pool in Azure Synapse Analytics.

Argumenten

table_or_indexed_view_name

Is de naam van de tabel of geïndexeerde weergave die het statistiekenobject bevat.

index_or_statistics_name of statistics_name | index_name of statistics_name

Is de naam van de index voor het bijwerken van statistieken op of de naam van de statistieken die moeten worden bijgewerkt. Als index_or_statistics_name of statistics_name niet is opgegeven, worden alle statistieken voor de tabel of geïndexeerde weergave bijgewerkt door de queryoptimalisatie. Dit omvat statistieken die zijn gemaakt met de instructie CREATE STATISTICS, statistieken met één kolom die zijn gemaakt wanneer AUTO_CREATE_STATISTICS is ingeschakeld en statistieken die zijn gemaakt voor indexen.

Zie ALTER DATABASE SET Optionsvoor meer informatie over AUTO_CREATE_STATISTICS. Als u alle indexen voor een tabel of weergave wilt weergeven, kunt u sp_helpindexgebruiken.

FULLSCAN

Rekenstatistieken door alle rijen in de tabel of geïndexeerde weergave te scannen. FULLSCAN en SAMPLE 100 PROCENT hebben dezelfde resultaten. FULLSCAN kan niet worden gebruikt met de optie SAMPLE.

VOORBEELD getal { PERCENT | RIJEN }

Hiermee geeft u het geschatte percentage of het aantal rijen in de tabel of geïndexeerde weergave voor de queryoptimalisatie die moet worden gebruikt bij het bijwerken van statistieken. Voor PERCENT kan getal tussen 0 en 100 zijn en voor RIJEN kan getal tussen 0 en het totale aantal rijen zijn. Het werkelijke percentage of het aantal rijen van de voorbeelden van de queryoptimalisatie komt mogelijk niet overeen met het opgegeven percentage of getal. De queryoptimalisatie scant bijvoorbeeld alle rijen op een gegevenspagina.

SAMPLE is handig voor speciale gevallen waarin het queryplan, op basis van standaardsampling, niet optimaal is. In de meeste gevallen is het niet nodig om SAMPLE op te geven, omdat de queryoptimalisatie gebruikmaakt van steekproeven en de statistisch significante steekproefgrootte standaard bepaalt, zoals vereist voor het maken van queryplannen van hoge kwaliteit.

Notitie

In SQL Server 2016 (13.x) wanneer u databasecompatibiliteitsniveau 130 gebruikt, worden steekproeven van gegevens om statistieken te bouwen parallel uitgevoerd om de prestaties van het verzamelen van statistieken te verbeteren. De queryoptimalisatie gebruikt parallelle voorbeeldstatistieken wanneer een tabelgrootte een bepaalde drempelwaarde overschrijdt. Vanaf SQL Server 2017 (14.x), ongeacht het compatibiliteitsniveau van de database, is het gedrag weer gewijzigd in het gebruik van een seriële scan om mogelijke prestatieproblemen met overmatige LATCH-wachttijden te voorkomen. De rest van het queryplan tijdens het bijwerken van statistieken houdt parallelle uitvoering bij, indien gekwalificeerd.

VOORBEELD kan niet worden gebruikt met de optie FULLSCAN. Wanneer geen SAMPLE noch FULLSCAN is opgegeven, gebruikt de queryoptimalisatiefunctie steekproefgegevens en berekent de steekproefgrootte standaard.

U wordt aangeraden 0 PROCENT of 0 RIJEN op te geven. Wanneer 0 PROCENT of RIJEN is opgegeven, wordt het statistiekenobject bijgewerkt, maar bevat het geen statistiekengegevens.

Voor de meeste workloads is een volledige scan niet vereist en is standaardsampling voldoende. Bepaalde workloads die gevoelig zijn voor zeer uiteenlopende gegevensdistributies, kunnen echter een grotere steekproefgrootte of zelfs een volledige scan vereisen. Hoewel schattingen nauwkeuriger kunnen worden met een volledige scan dan een steekproefscan, profiteren complexe plannen mogelijk niet aanzienlijk.

Zie Onderdelen en concepten van statistiekenvoor meer informatie.

RESAMPLE

Werk elke statistiek bij met behulp van de meest recente steekproeffrequentie.

Het gebruik van RESAMPLE kan resulteren in een volledige tabelscan. Statistieken voor indexen maken bijvoorbeeld gebruik van een volledige tabelscan voor hun steekproeffrequentie. Wanneer geen van de voorbeeldopties (SAMPLE, FULLSCAN, RESAMPLE) is opgegeven, worden de gegevens door de queryoptimalisatie gebruikt en wordt de grootte van de steekproef standaard berekend.

In Warehouse in Microsoft Fabric wordt RESAMPLE niet ondersteund.

PERSIST_SAMPLE_PERCENT = { ON | UIT }

Van toepassing op: SQL Server 2016 (13.x) Service Pack 1 CU4, SQL Server 2017 (14.x) Service Pack 1 of SQL Server 2019 (15.x) en latere versies, Azure SQL Database, Azure SQL Managed Instance

Wanneer ON, behouden de statistieken het ingestelde steekproefpercentage voor volgende updates die niet expliciet een steekproefpercentage opgeven. Wanneer UIT, wordt het percentage statistiekenampling opnieuw ingesteld op standaardsampling in volgende updates die niet expliciet een steekproefpercentage opgeven. De standaardwaarde is UIT.

DBCC-SHOW_STATISTICS en sys.dm_db_stats_properties de persistente waarde van het steekproefpercentage beschikbaar maken voor de geselecteerde statistiek.

Als AUTO_UPDATE_STATISTICS wordt uitgevoerd, wordt het persistente steekproefpercentage gebruikt, indien beschikbaar, of het standaardsamplingspercentage als dat niet het is. RESAMPLE-gedrag wordt niet beïnvloed door deze optie.

Als de tabel wordt afgekapt, worden alle statistieken die zijn gebouwd op de afgekapte heap of B-boomstructuur (HoBT) teruggezet met behulp van het standaardmonsterpercentage.

Notitie

Bij het opnieuw samenstellen van een index die eerder statistieken had bijgewerkt met PERSIST_SAMPLE_PERCENT, wordt in SQL Server het persistente steekproefpercentage teruggezet op de standaardinstelling. Vanaf SQL Server 2016 (13.x) SP2 CU17, SQL Server 2017 (14.x) CU26 en SQL Server 2019 (15.x) CU10 wordt het persistente steekproefpercentage behouden, zelfs wanneer een index opnieuw wordt opgebouwd.

ON PARTITIONS ( { <partition_number> | <bereik> } [, ... n] ) ]

van toepassing op: SQL Server 2014 (12.x) en hoger

Dwingt de bladniveaustatistieken af die betrekking hebben op de partities die zijn opgegeven in de COMPONENT ON PARTITIONS opnieuw worden berekend en vervolgens samengevoegd om de globale statistieken te bouwen. MET RESAMPLE is vereist omdat partitiestatistieken die zijn gebouwd met verschillende samplefrequenties niet samen kunnen worden samengevoegd.

ALL | KOLOMMEN | INDEX

Werk alle bestaande statistieken, statistieken bij die zijn gemaakt op een of meer kolommen of statistieken die zijn gemaakt voor indexen. Als geen van de opties is opgegeven, werkt de instructie UPDATE STATISTICS alle statistieken in de tabel of geïndexeerde weergave bij.

NORECOMPUTE

Schakel de optie voor het bijwerken van automatische statistieken, AUTO_UPDATE_STATISTICS, uit voor de opgegeven statistieken. Als deze optie is opgegeven, wordt deze update voor statistieken voltooid door de queryoptimalisatie en worden toekomstige updates uitgeschakeld.

Als u het gedrag van de AUTO_UPDATE_STATISTICS optie opnieuw wilt inschakelen, voert u UPDATESTATISTIEKEN opnieuw uit zonder de optie NORECOMPUTE of voert u sp_autostatsuit.

Waarschuwing

Met deze optie kunt u suboptimale queryplannen maken. We raden u aan deze optie spaarzaam te gebruiken en vervolgens alleen door een gekwalificeerde systeembeheerder.

Zie ALTER DATABASE SET Optionsvoor meer informatie over de AUTO_STATISTICS_UPDATE optie.

INCREMENTEEL = { AAN | UIT }

van toepassing op: SQL Server 2014 (12.x) en hoger

Wanneer ON, worden de statistieken opnieuw gemaakt op basis van partitiestatistieken. Wanneer UIT, wordt de structuur voor statistieken verwijderd en berekent SQL Server de statistieken opnieuw. De standaardwaarde is UIT.

Als statistieken per partitie niet worden ondersteund, wordt er een fout gegenereerd. Incrementele statistieken worden niet ondersteund voor de volgende typen statistieken:

  • Statistieken die zijn gemaakt met indexen die niet zijn gepartitioneerd met de basistabel.
  • Statistieken die zijn gemaakt in leesbare secundaire databases met AlwaysOn.
  • Statistieken die zijn gemaakt voor alleen-lezendatabases.
  • Statistieken die zijn gemaakt voor gefilterde indexen.
  • Statistieken die zijn gemaakt in weergaven.
  • Statistieken die zijn gemaakt op interne tabellen.
  • Statistieken die zijn gemaakt met ruimtelijke indexen of XML-indexen.

MAXDOP = max_degree_of_parallelism

van toepassing op: SQL Server (vanaf SQL Server 2016 (13.x) SP2 en SQL Server 2017 (14.x) CU3).

Overschrijft de maximale mate van parallelle uitvoering configuratieoptie voor de duur van de statistiekbewerking. Zie De maximale mate van parallelle configuratie van server configurerenvoor meer informatie. Gebruik MAXDOP om het aantal processors dat wordt gebruikt in een parallelle uitvoering van een plan te beperken. Het maximum is 64 processors.

max_degree_of_parallelism kan het volgende zijn:

1
Onderdrukt het genereren van parallelle plannen.

>1 Beperkt het maximum aantal processors dat wordt gebruikt in een parallelle statistiekbewerking tot het opgegeven aantal of minder op basis van de huidige systeemworkload.

0 (standaard)
Gebruikt het werkelijke aantal processors of minder op basis van de huidige systeemworkload.

update_stats_stream_option

Alleen ter informatie geïdentificeerd. Niet ondersteund. Toekomstige compatibiliteit is niet gegarandeerd.

AUTO_DROP = { AAN | UIT }

van toepassing op: SQL Server 2022 (16.x) en hoger.

Als statistieken momenteel worden gemaakt door een hulpprogramma van derden in een klantdatabase, kunnen deze statistiekenobjecten schemawijzigingen blokkeren of verstoren die de klant mogelijk wenst.

(Vanaf SQL Server 2022 (16.x)| Met deze functie kunt u statistiekenobjecten maken in een modus, zodat een schemawijziging niet niet wordt geblokkeerd door de statistieken, maar in plaats daarvan worden de statistieken verwijderd. Op deze manier gedragen automatische drop-statistieken zich als automatisch gemaakte statistieken.

Notitie

Als u de eigenschap Auto_Drop voor automatisch gemaakte statistieken probeert in of uit te stellen, kan dit fouten veroorzaken. Automatisch gemaakte statistieken maken altijd gebruik van automatisch verwijderen. Bij het herstellen van sommige back-ups is deze eigenschap mogelijk onjuist ingesteld tot de volgende keer dat het statistiekenobject wordt bijgewerkt (handmatig of automatisch). Automatisch gemaakte statistieken gedragen zich echter altijd als statistieken voor automatisch neerzetten.

Opmerkingen

Wanneer statistieken bijwerken

Zie Wanneer u statistiekenbijwerkt voor meer informatie over wanneer u UPDATE STATISTICSgebruikt.

Beperkingen

  • Het bijwerken van statistieken wordt niet ondersteund voor externe tabellen. Als u statistieken in een externe tabel wilt bijwerken, kunt u de statistieken verwijderen en opnieuw maken.
  • De optie MAXDOP is niet compatibel met STATS_STREAM, ROWCOUNT en PAGECOUNT opties.
  • De MAXDOP optie wordt beperkt door de workloadgroep Resource Governor MAX_DOP instelling, indien gebruikt.

Alle statistieken bijwerken met sp_updatestats

Zie de opgeslagen procedure sp_updatestatsvoor informatie over het bijwerken van statistieken voor alle door de gebruiker gedefinieerde en interne tabellen in de database. Met de volgende opdracht wordt bijvoorbeeld sp_updatestats aanroepen om alle statistieken voor de database bij te werken.

EXEC sp_updatestats;  

Automatisch index- en statistiekenbeheer

Maak gebruik van oplossingen zoals Adaptive Index Defragmentatie om automatisch indexdefragmentatie en statistiekenupdates voor een of meer databases te beheren. Deze procedure kiest automatisch of u een index wilt herbouwen of opnieuw ordenen op basis van het fragmentatieniveau, onder andere parameters, en statistieken bijwerken met een lineaire drempelwaarde.

De laatste update voor statistieken bepalen

Gebruik de functie STATS_DATE om te bepalen wanneer statistieken voor het laatst zijn bijgewerkt.

PDW/Azure Synapse Analytics

De volgende syntaxis wordt niet ondersteund door Analytics Platform System (PDW) / Azure Synapse Analytics:

UPDATE STATISTICS t1 (a,b);   
UPDATE STATISTICS t1 (a) WITH SAMPLE 10 ROWS;  
UPDATE STATISTICS t1 (a) WITH NORECOMPUTE;  
UPDATE STATISTICS t1 (a) WITH INCREMENTAL = ON;  
UPDATE STATISTICS t1 (a) WITH stats_stream = 0x01;  

Machtigingen

Hiervoor is ALTER machtiging voor de tabel of weergave vereist.

Voorbeelden

Een. Alle statistieken in een tabel bijwerken

In het volgende voorbeeld worden alle statistieken in de SalesOrderDetail tabel bijgewerkt.

USE AdventureWorks2022;  
GO  
UPDATE STATISTICS Sales.SalesOrderDetail;  
GO  

B. De statistieken voor een index bijwerken

In het volgende voorbeeld worden de statistieken voor de AK_SalesOrderDetail_rowguid-index van de SalesOrderDetail tabel bijgewerkt.

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

C. Statistieken bijwerken met behulp van steekproeven van 50 procent

In het volgende voorbeeld worden de statistieken voor de Name en ProductNumber kolommen in de Product tabel gemaakt en bijgewerkt.

USE AdventureWorks2022;
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. Statistieken bijwerken met FULLSCAN en NORECOMPUTE

In het volgende voorbeeld worden de Products statistieken in de Product tabel bijgewerkt, worden alle rijen in de Product tabel volledig gescand en worden automatische statistieken voor de Products statistieken uitgeschakeld.

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

Voorbeelden: Azure Synapse Analytics and Analytics Platform System (PDW)

E. Statistieken voor een tabel bijwerken

In het volgende voorbeeld worden de CustomerStats1 statistieken in de Customer tabel bijgewerkt.

UPDATE STATISTICS Customer (CustomerStats1);  

F. Statistieken bijwerken met behulp van een volledige scan

In het volgende voorbeeld worden de CustomerStats1 statistieken bijgewerkt op basis van het scannen van alle rijen in de Customer tabel.

UPDATE STATISTICS Customer (CustomerStats1) WITH FULLSCAN;  

G. Alle statistieken in een tabel bijwerken

In het volgende voorbeeld worden alle statistieken in de Customer tabel bijgewerkt.

UPDATE STATISTICS Customer;

H. CREATE STATISTICS gebruiken met AUTO_DROP

Als u statistieken voor automatisch verwijderen wilt gebruiken, voegt u het volgende toe aan de component 'WITH' van statistieken maken of bijwerken.

UPDATE STATISTICS Customer (CustomerStats1) WITH AUTO_DROP = ON