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 Statistics in Fabric datawarehousing voor meer informatie over statistieken in Microsoft Fabric.

Transact-SQL syntaxisconventies

Syntaxis

Syntaxis voor SQL Server en 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 ]

Syntaxis voor Azure Synapse Analytics en Parallel Data Warehouse.

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

Syntaxis voor 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

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

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 behulp van de CREATE STATISTICS instructie, statistieken met één kolom die worden gemaakt wanneer AUTO_CREATE_STATISTICS deze is ingeschakeld en statistieken die zijn gemaakt voor indexen.

Zie ALTER DATABASE SET Options voor meer informatie.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 PERCENT dezelfde resultaten hebben. FULLSCAN kan niet worden gebruikt met de SAMPLE optie.

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, getal kan van 0 tot en met 100 en voor ROWS, getal kan van 0 tot het totale aantal rijen. 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 op te geven SAMPLE 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 potentiële prestatieproblemen met overmatige LATCH wachttijden te voorkomen. De rest van het queryplan tijdens het bijwerken van statistieken houdt parallelle uitvoering bij, indien gekwalificeerd.

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

We raden u aan om op 0 PERCENT te geven of 0 ROWS. Wanneer 0 PERCENT of 0 ROWS is opgegeven, wordt het statistiekenobject bijgewerkt, maar bevat geen statistiekengegevens.

Voor de meeste workloads is een volledige scan niet vereist en is standaardsampling voldoende. Bepaalde werkbelastingen die gevoelig zijn voor veel verschillende gegevensdistributies, kunnen echter een grotere steekproefgrootte of zelfs een volledige scan vereisen. Hoewel schattingen mogelijk nauwkeuriger 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 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 RESAMPLE wordt dit 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 OFF, wordt het percentage statistiekenampling opnieuw ingesteld op standaardsampling in volgende updates die niet expliciet een steekproefpercentage opgeven. De standaardwaarde is OFF.

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 dit wordt uitgevoerd, wordt het persistente steekproefpercentage gebruikt, indien beschikbaar, of wordt het standaardsamplingspercentage gebruikt, indien niet. 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. En als statistieken worden bijgewerkt voor een object zonder rijen, wordt het standaardamplingspercentage weer gebruikt, zelfs als PERSIST_SAMPLE_PERCENT deze eerder is geconfigureerd.

Notitie

Bij het opnieuw samenstellen van een index waarmee eerder statistieken waren bijgewerkt PERSIST_SAMPLE_PERCENT, wordt het persistente steekproefpercentage in SQL Server 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 latere versies

Dwingt de bladniveaustatistieken af die betrekking hebben op de partities die zijn opgegeven in de ON PARTITIONS component om opnieuw te worden berekend en vervolgens samengevoegd om de globale statistieken te bouwen. WITH RESAMPLE is vereist omdat partitiestatistieken die zijn gebouwd met verschillende steekproeffrequenties 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, UPDATE STATISTICS worden alle statistieken in de tabel of geïndexeerde weergave bijgewerkt.

NORECOMPUTE

Schakel de optie AUTO_UPDATE_STATISTICSvoor het bijwerken van automatische statistieken 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 AUTO_UPDATE_STATISTICS optiegedrag opnieuw wilt inschakelen, voert u het opnieuw uit UPDATE STATISTICS zonder de NORECOMPUTE optie of voert u het uit sp_autostats.

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 Options voor meer informatie over de AUTO_STATISTICS_UPDATE optie.

INCREMENTEEL = { AAN | UIT }

Van toepassing op: SQL Server 2014 (12.x) en latere versies

Wanneer ON, worden de statistieken opnieuw gemaakt volgens partitiestatistieken. Wanneer OFF, wordt de structuur statistieken verwijderd en sql Server berekent de statistieken opnieuw. De standaardwaarde is OFF.

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).

Hiermee wordt de max degree of parallelism configuratieoptie voor de duur van de statistiekbewerking overschreven. Zie De maximale mate van parallelle configuratie van server configurerenvoor meer informatie. Gebruik MAXDOP dit 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

Hiermee beperkt u 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 latere versies

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 UPDATE STATISTICSbijwerkt voor meer informatie over wanneer u gebruikt.

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.
  • Het automatisch bijwerken van de statistieken die in elke columnstore-index worden gemaakt, wordt niet ondersteund. Als u dit probeert, resulteert dit in fout 35337: UPDATE STATISTICS failed because statistics cannot be updated on a columnstore index. UPDATE STATISTICS is valid only when used with the STATS_STREAM option.
  • 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.

EXECUTE sp_updatestats;

Automatisch index- en statistiekenbeheer

Gebruik oplossingen zoals Adaptive Index Defragmentatie om automatisch indexdefragmentatie en statistiekenupdates voor een of meer databases te beheren. Met deze procedure wordt automatisch gekozen of u een index wilt herbouwen of opnieuw ordenen op basis van het fragmentatieniveau, onder andere parameters, en statistieken wilt 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;