UPPDATERA STATISTIK (Transact-SQL)
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Warehouse i Microsoft Fabric
SQL-databas i Microsoft Fabric
Uppdaterar frågeoptimering statistik i en tabell eller indexerad vy. Som standard uppdaterar frågeoptimeraren redan statistik efter behov för att förbättra frågeplanen. I vissa fall kan du förbättra frågeprestanda med hjälp av UPDATE STATISTICS
eller den lagrade proceduren sp_updatestats för att uppdatera statistik oftare än standarduppdateringarna.
Genom att uppdatera statistik ser du till att frågor kompileras med up-to-date-statistik. Uppdatering av statistik via valfri process kan leda till att frågeplaner kompilerar om automatiskt. Vi rekommenderar att du inte uppdaterar statistiken för ofta eftersom det finns en prestandaavvägning mellan att förbättra frågeplaner och den tid det tar att kompilera om frågor. De specifika kompromisserna beror på ditt program.
UPDATE STATISTICS
kan använda tempdb
för att sortera radexemplet för att skapa statistik.
Not
Mer information om statistik i Microsoft Fabric finns i Statistik i informationslager för infrastrukturresurser.
Transact-SQL syntaxkonventioner
Syntax
Syntax för SQL Server och 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 för Azure Synapse Analytics och Parallel Data Warehouse.
UPDATE STATISTICS [ schema_name . ] table_name
[ ( { statistics_name | index_name } ) ]
[ WITH
{
FULLSCAN
| SAMPLE number PERCENT
| RESAMPLE
}
]
[;]
Syntax för Microsoft Fabric.
UPDATE STATISTICS [ schema_name . ] table_name
[ ( { statistics_name } ) ]
[ WITH
{
FULLSCAN
| SAMPLE number PERCENT
}
]
[;]
Not
Den här syntaxen stöds inte av en serverlös SQL-pool i Azure Synapse Analytics.
Argument
table_or_indexed_view_name
Namnet på den tabell eller indexerade vy som innehåller statistikobjektet.
index_or_statistics_name eller statistics_name | index_name eller statistics_name
Namnet på indexet för uppdatering av statistik eller namnet på den statistik som ska uppdateras. Om index_or_statistics_name eller statistics_name inte har angetts uppdaterar frågeoptimeraren all statistik för tabellen eller den indexerade vyn. Detta inkluderar statistik som skapats med hjälp av -instruktionen CREATE STATISTICS
, statistik med en kolumn som skapas när AUTO_CREATE_STATISTICS
den är på och statistik som skapats för index.
Mer information om AUTO_CREATE_STATISTICS
finns i ÄNDRA ALTERNATIV FÖR DATABASUPPSÄTTNING. Om du vill visa alla index för en tabell eller vy kan du använda sp_helpindex.
FULLSCAN
Beräkna statistik genom att skanna alla rader i tabellen eller indexerad vy.
FULLSCAN
och SAMPLE 100 PERCENT
har samma resultat.
FULLSCAN
kan inte användas med alternativet SAMPLE
.
EXEMPEL på tal { PROCENT | RADER }
Anger den ungefärliga procentandelen eller antalet rader i tabellen eller den indexerade vyn som frågeoptimeraren ska använda när statistik uppdateras. För PERCENT
kan talet vara mellan 0 och 100 och för ROWS
kan talet vara från 0 till det totala antalet rader. Den faktiska procentandelen eller antalet rader som frågeoptimerarexemplen kanske inte matchar procentandelen eller det angivna talet. Frågeoptimeraren söker till exempel igenom alla rader på en datasida.
SAMPLE
är användbart för särskilda fall där frågeplanen, baserat på standardsampling, inte är optimal. I de flesta fall är det inte nödvändigt att ange SAMPLE
eftersom frågeoptimeraren använder sampling och avgör den statistiskt signifikanta urvalsstorleken som standard, efter behov för att skapa frågeplaner av hög kvalitet.
Not
I SQL Server 2016 (13.x) när du använder databaskompatibilitetsnivå 130 görs sampling av data för att skapa statistik parallellt för att förbättra prestanda för statistikinsamling. Frågeoptimeraren använder parallell exempelstatistik när en tabellstorlek överskrider ett visst tröskelvärde. Från och med SQL Server 2017 (14.x), oavsett databaskompatibilitetsnivå, ändrades beteendet tillbaka till att använda en seriell genomsökning för att undvika potentiella prestandaproblem med orimliga LATCH
väntetider. Resten av frågeplanen vid uppdatering av statistik upprätthåller parallell körning om den är kvalificerad.
SAMPLE
kan inte användas med alternativet FULLSCAN
. När varken SAMPLE
eller FULLSCAN
har angetts använder frågeoptimeraren exempeldata och beräknar exempelstorleken som standard.
Vi rekommenderar att du inte anger 0 PERCENT
eller 0 ROWS
. När 0 PERCENT
eller 0 ROWS
har angetts uppdateras statistikobjektet men innehåller inte statistikdata.
För de flesta arbetsbelastningar krävs ingen fullständig genomsökning och standardsampling är tillräcklig. Vissa arbetsbelastningar som är känsliga för mycket varierande datadistributioner kan dock kräva en ökad urvalsstorlek, eller till och med en fullständig genomsökning. Uppskattningar kan bli mer exakta med en fullständig genomsökning än en genomsökning i urvalet, men komplexa planer kanske inte har någon väsentlig fördel.
Mer information finns i Komponenter och begrepp för statistik.
RESAMPLE
Uppdatera varje statistik med hjälp av den senaste exempelfrekvensen.
Användning RESAMPLE
kan resultera i en fullständig tabellgenomsökning. Statistik för index använder till exempel en fullständig tabellsökning för sin exempelfrekvens. När inget av exempelalternativen (SAMPLE
, FULLSCAN
, RESAMPLE
) anges tar frågeoptimeraren exempel på data och beräknar exempelstorleken som standard.
I Warehouse i Microsoft Fabric RESAMPLE
stöds inte.
PERSIST_SAMPLE_PERCENT = { ON | AV }
gäller för: SQL Server 2016 (13.x) Service Pack 1 CU4, SQL Server 2017 (14.x) Service Pack 1 eller SQL Server 2019 (15.x) och senare versioner, Azure SQL Database, Azure SQL Managed Instance
När ON
behåller statistiken den angivna samplingsprocenten för efterföljande uppdateringar som inte uttryckligen anger en samplingsprocent. När OFF
återställs statistiksamplingsprocenten till standardsampling i efterföljande uppdateringar som inte uttryckligen anger en samplingsprocent. Standardvärdet är OFF
.
DBCC-SHOW_STATISTICS och sys.dm_db_stats_properties exponera det bevarade procentvärdet för urvalet för den valda statistiken.
Om AUTO_UPDATE_STATISTICS
körs använder den den bevarade samplingsprocenten om den är tillgänglig, eller använder standardsamplingsprocent om inte.
RESAMPLE
beteende påverkas inte av det här alternativet.
Om tabellen trunkeras återgår all statistik som bygger på den trunkerade heapen eller B-trädet (HoBT) till att använda standardsamplingsprocenten. På samma sätt, om statistik uppdateras för ett objekt utan rader, återgår den till att använda standardsamplingsprocenten även om PERSIST_SAMPLE_PERCENT
den tidigare har konfigurerats.
Not
När du återskapar ett index som tidigare hade uppdaterats med PERSIST_SAMPLE_PERCENT
i SQL Server återställs den bevarade exempelprocenten tillbaka till standardvärdet. Från och med SQL Server 2016 (13.x) SP2 CU17, SQL Server 2017 (14.x) CU26 och SQL Server 2019 (15.x) CU10 behålls den bevarade exempelprocenten även när ett index återskapas.
PÅ PARTITIONER ( { <partition_number> | <range> } [ , ... n ] ) ]
gäller för: SQL Server 2014 (12.x) och senare versioner
Tvingar lövnivåstatistiken som täcker de partitioner som anges i ON PARTITIONS
satsen att omberäknas och sammanfogas sedan för att skapa den globala statistiken.
WITH RESAMPLE
krävs eftersom partitionsstatistik som skapats med olika exempelfrekvenser inte kan sammanfogas.
ALLA | KOLUMNER | INDEX
Uppdatera all befintlig statistik, statistik som skapats på en eller flera kolumner eller statistik som skapats för index. Om inget av alternativen anges uppdaterar instruktionen UPDATE STATISTICS
all statistik i tabellen eller i den indexerade vyn.
NORECOMPUTE
Inaktivera alternativet för automatisk statistikuppdatering, AUTO_UPDATE_STATISTICS
, för den angivna statistiken. Om det här alternativet anges slutför frågeoptimeraren den här statistikuppdateringen och inaktiverar framtida uppdateringar.
Om du vill återaktivera AUTO_UPDATE_STATISTICS
alternativbeteendet kör du UPDATE STATISTICS
igen utan alternativet NORECOMPUTE
eller kör sp_autostats
.
Varning
Med det här alternativet kan du skapa suboptimala frågeplaner. Vi rekommenderar att du använder det här alternativet sparsamt och sedan endast av en kvalificerad systemadministratör.
Mer information om alternativet finns i AUTO_STATISTICS_UPDATE
ÄNDRA ALTERNATIV FÖR DATABASUPPSÄTTNING.
INCREMENTAL = { ON | AV }
gäller för: SQL Server 2014 (12.x) och senare versioner
När ON
återskapas statistiken enligt partitionsstatistik. När OFF
tas statistikträdet bort och SQL Server beräknar statistiken igen. Standardvärdet är OFF
.
Om statistik per partition inte stöds genereras ett fel. Inkrementell statistik stöds inte för följande statistiktyper:
- Statistik som skapats med index som inte är partitionsjusterade med bastabellen.
- Statistik som skapats på skrivbara sekundära databaser med AlwaysOn.
- Statistik som skapats på skrivskyddade databaser.
- Statistik som skapats för filtrerade index.
- Statistik som skapats för vyer.
- Statistik som skapats i interna tabeller.
- Statistik som skapats med rumsliga index eller XML-index.
MAXDOP = max_degree_of_parallelism
gäller för: SQL Server (från och med SQL Server 2016 (13.x) SP2 och SQL Server 2017 (14.x) CU3).
Åsidosätter max degree of parallelism
konfigurationsalternativet under statistikåtgärdens varaktighet. Mer information finns i Konfigurera den maximala graden av parallellitet serverkonfigurationsalternativ. Använd MAXDOP
för att begränsa antalet processorer som används i en parallell plankörning. Maximalt är 64 processorer.
max_degree_of_parallelism kan vara:
1
Undertrycker parallell plangenerering.
>1
Begränsar det maximala antalet processorer som används i en parallell statistikåtgärd till det angivna antalet eller färre baserat på den aktuella systemarbetsbelastningen.
0
(standard)
Använder det faktiska antalet processorer eller färre baserat på den aktuella systemarbetsbelastningen.
update_stats_stream_option
Identifieras endast i informationssyfte. Stöds inte. Framtida kompatibilitet garanteras inte.
AUTO_DROP = { ON | AV }
gäller för: SQL Server 2022 (16.x) och senare versioner
Om statistik för närvarande skapas av ett verktyg från tredje part i en kunddatabas kan dessa statistikobjekt blockera eller störa schemaändringar som kunden kan önska.
(Från och med SQL Server 2022 (16.x))| Med den här funktionen kan du skapa statistikobjekt i ett läge så att en schemaändring inte blockeras av statistiken, utan i stället tas statistiken bort. På så sätt fungerar statistik för automatisk borttagning som statistik som skapas automatiskt.
Not
Om du försöker ange eller ta bort egenskapen Auto_Drop för statistik som skapats automatiskt kan det uppstå fel – automatiskt skapad statistik använder alltid automatisk borttagning. Vissa säkerhetskopior, när de återställs, kan ha den här egenskapen felaktigt inställd till nästa gång statistikobjektet uppdateras (manuellt eller automatiskt). Statistik som skapas automatiskt fungerar dock alltid som statistik för automatisk borttagning.
Anmärkningar
När DU SKA UPPDATERA STATISTIK
Mer information om när du ska använda UPDATE STATISTICS
finns i När du ska uppdatera statistik.
Begränsningar
- Uppdatering av statistik stöds inte i externa tabeller. Om du vill uppdatera statistiken i en extern tabell släpper du och återskapar statistiken.
- Det går inte att uppdatera den statistik som skapas automatiskt för varje kolumnlagringsindex. Om du försöker med det här resulterar det i fel 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.
- Alternativet
MAXDOP
är inte kompatibelt med alternativenSTATS_STREAM
,ROWCOUNT
ochPAGECOUNT
. - Alternativet
MAXDOP
begränsas av arbetsbelastningsgruppen Resource GovernorMAX_DOP
om det används.
Uppdatera all statistik med sp_updatestats
Information om hur du uppdaterar statistik för alla användardefinierade och interna tabeller i databasen finns i den lagrade proceduren sp_updatestats. Följande kommando anropar till exempel sp_updatestats
för att uppdatera all statistik för databasen.
EXECUTE sp_updatestats;
Automatisk index- och statistikhantering
Använd lösningar som Adaptive Index Defrag för att automatiskt hantera indexdefragmentering och statistikuppdateringar för en eller flera databaser. Den här proceduren väljer automatiskt om du vill återskapa eller omorganisera ett index enligt dess fragmenteringsnivå, bland andra parametrar, och uppdatera statistik med ett linjärt tröskelvärde.
Fastställa den senaste statistikuppdateringen
Använd funktionen STATS_DATE för att avgöra när statistiken senast uppdaterades.
PDW/Azure Synapse Analytics
Följande syntax stöds inte av 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;
Behörigheter
Kräver ALTER
behörighet i tabellen eller vyn.
Exempel
A. Uppdatera all statistik i en tabell
I följande exempel uppdateras all statistik i tabellen SalesOrderDetail
.
USE AdventureWorks2022;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO
B. Uppdatera statistiken för ett index
I följande exempel uppdateras statistiken för AK_SalesOrderDetail_rowguid
index för tabellen SalesOrderDetail
.
USE AdventureWorks2022;
GO
UPDATE STATISTICS Sales.SalesOrderDetail (AK_SalesOrderDetail_rowguid);
GO
C. Uppdatera statistik med 50 procent sampling
I följande exempel skapas och uppdateras sedan statistiken för kolumnerna Name
och ProductNumber
i tabellen Product
.
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. Uppdatera statistik med hjälp av FULLSCAN och NORECOMPUTE
I följande exempel uppdateras Products
-statistiken i tabellen Product
, tvingar fram en fullständig genomsökning av alla rader i tabellen Product
och inaktiverar automatisk statistik för Products
statistik.
USE AdventureWorks2022;
GO
UPDATE STATISTICS Production.Product (Products)
WITH FULLSCAN, NORECOMPUTE;
GO
Exempel: Azure Synapse Analytics and Analytics Platform System (PDW)
E. Uppdatera statistik i en tabell
I följande exempel uppdateras CustomerStats1
statistik i tabellen Customer
.
UPDATE STATISTICS Customer (CustomerStats1);
F. Uppdatera statistik med hjälp av en fullständig genomsökning
I följande exempel uppdateras CustomerStats1
statistik baserat på genomsökning av alla rader i tabellen Customer
.
UPDATE STATISTICS Customer (CustomerStats1) WITH FULLSCAN;
G. Uppdatera all statistik i en tabell
I följande exempel uppdateras all statistik i tabellen Customer
.
UPDATE STATISTICS Customer;
H. Använda CREATE STATISTICS med AUTO_DROP
Om du vill använda statistik för automatisk borttagning lägger du bara till följande i "WITH"-satsen för att skapa eller uppdatera statistik.
UPDATE STATISTICS Customer (CustomerStats1) WITH AUTO_DROP = ON;
Relaterat innehåll
- Statistik
- Statistik i Microsoft Fabric
- ALTER DATABASE (Transact-SQL)
- sys.dm_db_stats_properties (Transact-SQL)
- sys.dm_db_stats_histogram (Transact-SQL)
- SKAPA STATISTIK (Transact-SQL)
- DBCC SHOW_STATISTICS (Transact-SQL)
- DROP STATISTICS (Transact-SQL)
- sp_autostats (Transact-SQL)
- sp_updatestats (Transact-SQL)
- STATS_DATE (Transact-SQL)