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. Om du uppdaterar statistik via en process kan det 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 Statistics in Microsoft Fabric.
Transact-SQL syntaxkonventioner
Syntax
-- 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
}
]
[;]
Not
Den här syntaxen stöds inte av en serverlös SQL-pool i Azure Synapse Analytics.
Argument
table_or_indexed_view_name
Är namnet på den tabell eller indexerade vy som innehåller statistikobjektet.
index_or_statistics_name eller statistics_name | index_name eller statistics_name
Är namnet på indexet som statistik ska uppdateras på 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 CREATE STATISTICS-instruktionen, statistik med en kolumn som skapas när AUTO_CREATE_STATISTICS är på och statistik som skapats för index.
Mer information om AUTO_CREATE_STATISTICS finns i ALTER DATABASE SET Options. 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 PROCENT har samma resultat. FULLSCAN kan inte användas med alternativet EXEMPEL.
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 PROCENT kan tal vara från 0 till 100 och för RADER 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 specialfall 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 högkvalitativa frågeplaner.
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 alltför långa SPÄRRväntningar. Resten av frågeplanen vid uppdatering av statistik upprätthåller parallell körning om den är kvalificerad.
EXEMPEL 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 PROCENT eller 0 RADER. När 0 PROCENT eller RADER 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.
Om du använder RESAMPLE kan det resultera i en fullständig genomsö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) har angetts tar frågeoptimeraren exempel på data och beräknar exempelstorleken som standard.
I Warehouse i Microsoft Fabric stöds inte RESAMPLE.
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 ONbehå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-beteendet 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.
Not
I SQL Server återställs den bevarade exempelprocenten till standard när du återskapar ett index som tidigare hade statistik uppdaterad med PERSIST_SAMPLE_PERCENT. 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> | <intervall> } [, ... n] ) ]
gäller för: SQL Server 2014 (12.x) och senare
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 global statistik. MED 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 UPDATE STATISTICS-instruktionen all statistik i tabellen eller 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 aktivera alternativet AUTO_UPDATE_STATISTICS igen kör du UPPDATERA STATISTIK 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 AUTO_STATISTICS_UPDATE finns i ALTER DATABASE SET Options.
INCREMENTAL = { ON | AV }
gäller för: SQL Server 2014 (12.x) och senare
När ONåterskapas statistiken enligt partitionsstatistik. När OFFtas 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 maximal grad av parallellitet konfigurationsalternativ 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.
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 – statistik som skapas automatiskt 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.
- 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.
EXEC 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)