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 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 SAMPLE
FULLSCAN
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_STATISTICS
voor 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
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 STATISTICS
bijwerkt 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 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.
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;
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)