STATISTIEKEN BIJWERKEN (Transact-SQL)
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL-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_autostats
uit.
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
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 STATISTICS
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.
- De optie
MAXDOP
is niet compatibel metSTATS_STREAM
,ROWCOUNT
enPAGECOUNT
opties. - De
MAXDOP
optie wordt beperkt door de workloadgroep Resource GovernorMAX_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
Verwante inhoud
- Statistieken
- Statistieken in Microsoft Fabric
- ALTER DATABASE (Transact-SQL)
- sys.dm_db_stats_properties (Transact-SQL)
- sys.dm_db_stats_histogram (Transact-SQL)
- STATISTIEKEN maken (Transact-SQL)
- DBCC-SHOW_STATISTICS (Transact-SQL)
- DROP STATISTICS (Transact-SQL)
-
sp_autostats (Transact-SQL) - sp_updatestats (Transact-SQL)
- STATS_DATE (Transact-SQL)