Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
Lekérdezésoptimalizálási statisztikákat hoz létre egy tábla egy vagy több oszlopán, indexelt nézeten vagy külső táblán. A legtöbb lekérdezés esetében a lekérdezésoptimalizáló már létrehozza a megfelelő statisztikákat egy kiváló minőségű lekérdezési tervhez; néhány esetben további statisztikákat kell létrehoznia a lekérdezési tervvel, CREATE STATISTICS vagy módosítania kell a lekérdezési teljesítményt.
További információ: Statisztika.
Megjegyzés
A Microsoft Fabric statisztikáiról további információt a Fabric Data Warehouse statisztikái című témakörben talál.
Transact-SQL szintaxis konvenciók
Szemantika
Szintaxis az SQL Serverhez, az Azure SQL Database-hez és a felügyelt Azure SQL-példányhoz.
-- Create statistics on an external table
CREATE STATISTICS statistics_name
ON { table_or_indexed_view_name } ( column [ , ...n ] )
[ WITH FULLSCAN ] ;
-- Create statistics on a regular table or indexed view
CREATE STATISTICS statistics_name
ON { table_or_indexed_view_name } ( column [ , ...n ] )
[ WHERE <filter_predicate> ]
[ WITH
[ FULLSCAN
[ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]
| SAMPLE number { PERCENT | ROWS }
[ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]
| <update_stats_stream_option> [ , ...n ]
[ [ , ] NORECOMPUTE ]
[ [ , ] INCREMENTAL = { ON | OFF } ]
[ [ , ] MAXDOP = max_degree_of_parallelism ]
[ [ , ] AUTO_DROP = { ON | OFF } ]
]
] ;
<filter_predicate> ::=
<conjunct> [ AND <conjunct> ]
<conjunct> ::=
<disjunct> | <comparison>
<disjunct> ::=
column_name IN (constant , ...)
<comparison> ::=
column_name <comparison_op> constant
<comparison_op> ::=
IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !<
<update_stats_stream_option> ::=
[ STATS_STREAM = stats_stream ]
[ ROWCOUNT = numeric_constant ]
[ PAGECOUNT = numeric_constant ]
Az Azure Synapse Analytics and Analytics Platform System (PDW) szintaxisa.
CREATE STATISTICS statistics_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
( column_name [ , ...n ] )
[ WHERE <filter_predicate> ]
[ WITH {
FULLSCAN
| SAMPLE number PERCENT
}
]
[ ; ]
<filter_predicate> ::=
<conjunct> [ AND <conjunct> ]
<conjunct> ::=
<disjunct> | <comparison>
<disjunct> ::=
column_name IN (constant , ...)
<comparison> ::=
column_name <comparison_op> constant
<comparison_op> ::=
IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !<
A Microsoft Fabric szintaxisa.
CREATE STATISTICS statistics_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
( column_name )
[ WITH {
FULLSCAN
| SAMPLE number PERCENT
}
]
[ ; ]
Érvek
statistics_name
A létrehozandó statisztikák neve.
table_or_indexed_view_name
Annak a táblának, indexelt nézetnek vagy külső táblának a neve, amelyen létre szeretné hozni a statisztikákat. Egy másik adatbázis statisztikáinak létrehozásához adjon meg egy minősített táblanevet.
oszlop [ ,... n ]
Egy vagy több oszlop, amelyet fel kell venni a statisztikákba. Az oszlopoknak prioritási sorrendben kell lenniük balról jobbra. A hisztogram létrehozásához csak az első oszlopot használja a rendszer. Minden oszlop oszlopközi korrelációs statisztikákhoz, úgynevezett sűrűségekhez használatos.
Az indexkulcs oszlopaként megadható oszlopokat az alábbi kivételekkel adhatja meg:
xml-, teljes szöveges és FILESTREAM-oszlopok nem adhatók meg.
A számított oszlopok csak akkor adhatók meg, ha az adatbázis és
ARITHABORTazQUOTED_IDENTIFIERadatbázis beállításai.ONA CLR felhasználó által definiált típusoszlopai akkor adhatók meg, ha a típus támogatja a bináris rendezést. A felhasználó által definiált típusú oszlopok metódushívásaként definiált számított oszlopok akkor adhatók meg, ha a metódusok determinisztikusként vannak megjelölve.
HOL <filter_predicate>
A statisztikai objektum létrehozásakor belefoglalandó sorok egy részhalmazának kiválasztására szolgáló kifejezést ad meg. A szűrő predikátummal létrehozott statisztikákat szűrt statisztikáknak nevezzük. A szűrő predikátum egyszerű összehasonlító logikát használ, és nem hivatkozhat számított oszlopra, UDT-oszlopra, térbeli adattípus-oszlopra vagy hierarchiaazonosító adattípus-oszlopra. A konstansokat használó NULL összehasonlítások nem engedélyezettek az összehasonlító operátorokkal. Használja inkább a IS NULL és IS NOT NULL operátorokat.
Íme néhány példa a Production.BillOfMaterials táblára vonatkozó szűrő predikátumokra:
WHERE StartDate > '20000101' AND EndDate <= '20000630'WHERE ComponentID IN (533, 324, 753)WHERE StartDate IN ('20000404', '20000905') AND EndDate IS NOT NULL
A szűrési predikátumokról további információt a Szűrt indexek létrehozása című témakörben talál.
FULLSCAN
A következőkre vonatkozik: SQL Server 2016 (13.x) SP 1 CU 4, SQL Server 2017 (14.x) CU 1 és újabb verziók
Az összes sor vizsgálatával kiszámítja a statisztikákat.
FULLSCAN és SAMPLE 100 PERCENT ugyanazokkal az eredményekkel rendelkezik.
FULLSCAN nem használható a SAMPLE beállítással.
Ha nincs megadva, az SQL Server mintavételezéssel hozza létre a statisztikákat, és meghatározza a kiváló minőségű lekérdezési terv létrehozásához szükséges mintaméretet.
A Microsoft Fabric Warehouse-ban csak egyoszlopos FULLSCAN és egyoszlopos SAMPLEstatisztikák támogatottak. Ha nincs lehetőség, SAMPLE a rendszer statisztikákat hoz létre.
MINTAszám { PERCENT | SOROK }
A lekérdezésoptimalizáló statisztikai adatok létrehozásakor használni kívánt tábla- vagy indexelt nézetben adja meg a sorok hozzávetőleges százalékát vagy számát. A PERCENTszám értéke 0 és 100 között lehet, a ROWSszám pedig 0 és a sorok teljes száma között lehet. Előfordulhat, hogy a lekérdezésoptimalizáló-minták tényleges százaléka vagy száma nem felel meg a megadott százalékos értéknek vagy számnak. A lekérdezésoptimalizáló például egy adatoldal összes sorát megvizsgálja.
SAMPLE olyan speciális esetekben hasznos, amikor a lekérdezési terv az alapértelmezett mintavételezés alapján nem optimális. A legtöbb esetben nem szükséges megadni SAMPLE , mert a lekérdezésoptimalizáló már mintavételezést használ, és alapértelmezés szerint meghatározza a statisztikailag jelentős mintaméretet a kiváló minőségű lekérdezési tervek létrehozásához.
SAMPLE nem használható a FULLSCAN beállítással. Ha SAMPLE nincs megadva, FULLSCAN a lekérdezésoptimalizáló mintavételezett adatokat használ, és alapértelmezés szerint kiszámítja a minta méretét.
Javasoljuk, hogy ne adjon meg vagy 0 PERCENT0 ROWS. Ha 0 PERCENT meg van adva vagy 0 ROWS meg van adva, a statisztikai objektum létrejön, de nem tartalmaz statisztikai adatokat.
A Microsoft Fabric Warehouse-ban csak egyoszlopos FULLSCAN és egyoszlopos SAMPLEstatisztikák támogatottak. Ha nincs lehetőség, FULLSCAN a rendszer statisztikákat hoz létre.
PERSIST_SAMPLE_PERCENT = { ON | KI }
Amikor ONa statisztikák megtartják a létrehozási mintavételezési százalékot az olyan későbbi frissítéseknél, amelyek nem határoznak meg explicit módon mintavételezési százalékot. Amikor OFFa statisztikai mintavételezési százalék visszaállítja az alapértelmezett mintavételezést a későbbi frissítésekben, amelyek nem adják meg explicit módon a mintavételezési százalékot. Az alapértelmezett érték a OFF.
Megjegyzés
Ha a táblázat csonkolva van, a csonkolt halomra vagy a B-fára (HoBT) épülő összes statisztika visszaáll az alapértelmezett mintavételezési százalékra. Hasonlóképpen, ha a statisztikák sorok nélkül frissülnek egy objektumon, akkor az visszaállítja az alapértelmezett mintavételezési százalékot, még akkor is, ha PERSIST_SAMPLE_PERCENT korábban konfigurálva volt.
STATS_STREAM = stats_stream
Csak tájékoztatási célokra van meghatározva. Nem támogatott. A jövőbeli kompatibilitás nem garantált.
NORECOMPUTE
Tiltsa le az automatikus statisztikafrissítési beállítást AUTO_STATISTICS_UPDATE esetén. Ha ez a beállítás meg van adva, a lekérdezésoptimalizáló elvégzi a statistics_name folyamatban lévő statisztikai frissítéseit, és letiltja a jövőbeli frissítéseket.
A statisztikai frissítések újbóli engedélyezéséhez távolítsa el a statisztikákat a DROP STATISTICS használatával, majd futtassa CREATE STATISTICS a NORECOMPUTE beállítás nélkül.
Figyelmeztetés
Ha letiltja a statisztikák automatikus frissítését, az megakadályozhatja, hogy a Lekérdezésoptimalizáló optimális végrehajtási terveket válasszon a táblát tartalmazó lekérdezésekhez. Ezt a lehetőséget takarékosan, csak egy minősített adatbázis-rendszergazda használhatja.
A beállítással kapcsolatos további információkért lásd az AUTO_STATISTICS_UPDATEALTER DATABASE SET beállításait. A statisztikai frissítések letiltásáról és újbóli engedélyezéséről további információt a Statisztika című témakörben talál.
NÖVEKMÉNYES = { BE | KI }
: SQL Server 2014 (12.x) és újabb verziók
Amikor ONa létrehozott statisztikák partíciónkénti statisztikák. Amikor OFFa rendszer az összes partíció statisztikáit kombinálja. Az alapértelmezett érték a OFF.
Ha a partíciónkénti statisztikák nem támogatottak, hiba jön létre. A növekményes statisztikák nem támogatottak a következő statisztikai típusokhoz:
- Olyan indexekkel létrehozott statisztikák, amelyek nincsenek partícióhoz igazítva az alaptáblához.
- Az Always On olvasható másodlagos adatbázisokon létrehozott statisztikák.
- Írásvédett adatbázisokon létrehozott statisztikák.
- Szűrt indexeken létrehozott statisztikák.
- Nézeteken létrehozott statisztikák.
- Belső táblákon létrehozott statisztikák.
- Térbeli indexekkel vagy XML-indexekkel létrehozott statisztikák.
MAXDOP = max_degree_of_parallelism
A következőkre vonatkozik: SQL Server 2016 (13.x) SP 2, SQL Server 2017 (14.x) CU 3 és újabb verziók
Felülbírálja a maximális párhuzamossági konfigurációs beállítást a statisztikai művelet során. További információ: kiszolgálókonfiguráció: a párhuzamosság maximális foka. A párhuzamos terv végrehajtásához használt processzorok számának korlátozására használható MAXDOP . A maximális érték 64 processzor.
max_degree_of_parallelism lehet:
-
1: Letiltja a párhuzamos tervgenerálást. -
>1: A párhuzamos indexműveletekben használt processzorok maximális számát a megadott számra korlátozza. -
0(alapértelmezett): A processzorok tényleges számát használja, vagy kevesebbet az aktuális rendszerterhelés alapján.
update_stats_stream_option
Csak tájékoztatási célokra van meghatározva. Nem támogatott. A jövőbeli kompatibilitás nem garantált.
AUTO_DROP = { ON | KI }
A következőkre vonatkozik: SQL Server 2022 (16.x) és újabb verziók, valamint Azure SQL Database, Felügyelt Azure SQL-példány
Az SQL Server 2022 (16.x) előtt, ha a statisztikákat egy felhasználó vagy egy külső eszköz manuálisan hozza létre egy felhasználói adatbázisban, ezek a statisztikai objektumok blokkolhatják vagy zavarhatják az ügyfél által kívánt sémamódosításokat.
Az SQL Server 2022 -től (16.x) kezdődően a AUTO_DROP beállítás alapértelmezés szerint engedélyezve van az összes új és migrált adatbázisban. A AUTO_DROP tulajdonság lehetővé teszi a statisztikai objektumok létrehozását olyan módban, hogy a statisztikai objektum nem blokkolja az azt követő sémamódosítást, hanem szükség szerint elveti a statisztikákat. Így a manuálisan létrehozott, AUTO_DROP engedélyezett statisztikák automatikusan létrehozott statisztikákhoz hasonlóan viselkednek.
Megjegyzés
Az automatikusan létrehozott statisztikák Auto_Drop tulajdonságának beállítása vagy törlése hibákat eredményezhet. Az automatikusan létrehozott statisztikák mindig automatikus elvetést használnak. Egyes biztonsági másolatok visszaállításakor előfordulhat, hogy ez a tulajdonság helytelenül van beállítva a statisztikai objektum következő frissítéséig (manuálisan vagy automatikusan). Az automatikusan létrehozott statisztikák azonban mindig úgy viselkednek, mint az automatikus csökkenési statisztikák. Amikor egy adatbázist az SQL Server 2022-re (16.x) állít vissza egy korábbi verzióból, ajánlott az adatbázison végrehajtani sp_updatestats a statisztikai AUTO_DROP funkció megfelelő metaadatainak beállításával.
További információ: AUTO_DROP lehetőség.
Engedélyek
Az alábbi engedélyek egyikére van szükség:
ALTER TABLE- A felhasználó a tábla tulajdonosa
- Tagság a db_ddladmin rögzített adatbázis-szerepkörben
Megjegyzések
Az SQL Server a tempdb mintavételezett sorokat a statisztikák létrehozása előtt rendezheti.
Külső táblák statisztikái
Külső táblastatisztikák létrehozásakor az SQL Server importálja a külső táblát egy ideiglenes SQL Server-táblába, majd létrehozza a statisztikákat. A mintastatisztikák esetében csak a mintául szolgáló sorokat importálja a rendszer. Ha nagy külső táblázattal rendelkezik, gyorsabban használhatja az alapértelmezett mintavételezést a teljes vizsgálati lehetőség helyett.
Ha a külső tábla DELIMITEDTEXT, CSV, PARQUETvagy DELTA használ adattípusként, a külső táblák csak CREATE STATISTICS parancsonként egy oszlop statisztikáit támogatják.
Szűrt feltétellel rendelkező statisztikák
A szűrt statisztikák javíthatják a lekérdezési teljesítményt a jól definiált adathalmazokból kiválasztott lekérdezések esetében. A szűrt statisztikák a záradékban WHERE egy szűrő predikátumot használnak a statisztikákban szereplő adatok részhalmazának kiválasztásához.
Mikor érdemes használni a CREATE STATISTICS-t?
A használat CREATE STATISTICSidőpontjáról további információt a Statisztika című témakörben talál.
Hivatkozott függőségek szűrt statisztikákhoz
A sys.sql_expression_dependencies katalógusnézet hivatkozási függőségként követi nyomon a szűrt statisztikai predikátum minden oszlopát. A szűrt statisztikák létrehozása előtt vegye figyelembe a táblaoszlopokon végrehajtott műveleteket. A szűrt statisztikai predikátumban definiált táblaoszlopok definícióját nem lehet elvetni, átnevezni vagy módosítani.
Korlátozások
- A statisztikák frissítése külső táblákban nem támogatott. Egy külső tábla statisztikáinak frissítéséhez dobja le és hozza létre újra a statisztikákat.
- Statisztikai objektumonként legfeljebb 64 oszlopot listázhat.
- A
MAXDOPbeállítás nem kompatibilis a beállításokkalSTATS_STREAMésROWCOUNTa beállításokkalPAGECOUNT. - A
MAXDOPbeállítást a Resource Governor számítási feladatcsoportMAX_DOPbeállítás korlátozza, ha használja. -
CREATEésDROP STATISTICSa külső táblák nem támogatottak az Azure SQL Database-ben.
Példák
A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.
Egy. A CREATE STATISTICS használata SZÁZALÉK MINTAszámmal
A következő példa hozza létre a ContactMail1 statisztikákat, az AdventureWorks2025 adatbázis táblázatának és oszlopainak BusinessEntityID 5 EmailPromotionPerson százalékát tartalmazó véletlenszerű mintával.
CREATE STATISTICS ContactMail1
ON Person.Person(BusinessEntityID, EmailPromotion)
WITH SAMPLE 5 PERCENT;
B. A CREATE STATISTICS használata a FULLSCAN és a NORECOMPUTE használatával
Az alábbi példa létrehozza a NamePurchase tábla összes sorának BusinessEntityID és EmailPromotion oszlopának statisztikáját, és letiltja a Person statisztikák automatikus újrafordítását.
CREATE STATISTICS NamePurchase
ON AdventureWorks2022.Person.Person(BusinessEntityID, EmailPromotion)
WITH FULLSCAN, NORECOMPUTE;
C. Szűrt statisztikák létrehozása a CREATE STATISTICS használatával
Az alábbi példa a szűrt statisztikákat ContactPromotion1hozza létre. Az adatbázismotor az adatok 50 százalékát mintázta, majd kiválasztja a 2-vel EmailPromotion egyenlő sorokat.
CREATE STATISTICS ContactPromotion1
ON Person.Person(BusinessEntityID, LastName, EmailPromotion)
WHERE EmailPromotion = 2
WITH SAMPLE 50 PERCENT;
GO
D. Statisztikák létrehozása külső táblán
Egyetlen döntést kell hoznia, amikor statisztikákat hoz létre egy külső táblán az oszlopok listájának megadása mellett, hogy a statisztikát a sorok mintavételezésével vagy az összes sor vizsgálatával hozza-e létre.
CREATE és DROP STATISTICS a külső táblák nem támogatottak az Azure SQL Database-ben.
Mivel az SQL Server adatokat importál a külső táblából egy ideiglenes táblába a statisztikák létrehozásához, a teljes vizsgálati lehetőség sokkal tovább tart. Nagy táblák esetében az alapértelmezett mintavételezési módszer általában elegendő.
--Create statistics on an external table and use default sampling.
CREATE STATISTICS CustomerStats1
ON DimCustomer(CustomerKey, EmailAddress);
--Create statistics on an external table and scan all the rows
CREATE STATISTICS CustomerStats1
ON DimCustomer(CustomerKey, EmailAddress)
WITH FULLSCAN;
E. A CREATE STATISTICS használata FULLSCAN és PERSIST_SAMPLE_PERCENT
Az alábbi példa létrehozza a NamePurchase táblázat összes sorának BusinessEntityID és EmailPromotion oszlopának statisztikáját Person , és 100 százalékos mintavételi százalékot állít be minden olyan későbbi frissítéshez, amely nem határoz meg explicit módon mintavételezési százalékot.
CREATE STATISTICS NamePurchase
ON AdventureWorks2022.Person.Person (BusinessEntityID, EmailPromotion)
WITH FULLSCAN, PERSIST_SAMPLE_PERCENT = ON;
Példák az AdventureWorksDW-adatbázis használatára
F. Két oszlop statisztikáinak létrehozása
Az alábbi példa a CustomerStats1 táblázat oszlopai és CustomerKey oszlopai alapján hozza létre a EmailAddress statisztikákatDimCustomer. A statisztikák a táblázat sorainak Customer statisztikailag jelentős mintavételezése alapján jönnek létre.
CREATE STATISTICS CustomerStats1
ON DimCustomer(CustomerKey, EmailAddress);
G. Statisztikák létrehozása teljes vizsgálattal
Az alábbi példa a CustomerStatsFullScan táblázat összes sorának vizsgálata alapján hozza létre a DimCustomer statisztikákat.
CREATE STATISTICS CustomerStatsFullScan
ON DimCustomer(CustomerKey, EmailAddress)
WITH FULLSCAN;
H. Statisztikák létrehozása a minta százalékos értékének megadásával
Az alábbi példa a CustomerStatsSampleScan táblázat sorainak 50 százalékának vizsgálata alapján hozza létre a DimCustomer statisztikákat.
CREATE STATISTICS CustomerStatsSampleScan
ON DimCustomer(CustomerKey, EmailAddress)
WITH SAMPLE 50 PERCENT;
Én. A CREATE STATISTICS használata AUTO_DROP
Az automatikus csepegtetési statisztikák használatához egyszerűen adja hozzá az alábbiakat a WITH statisztikák létrehozásának vagy frissítésének záradékához.
CREATE STATISTICS CustomerStats1
ON DimCustomer(CustomerKey, EmailAddress)
WITH AUTO_DROP = ON;
A meglévő statisztikák automatikus elvetési beállításának kiértékeléséhez használja a auto_dropsys.stats oszlopot:
SELECT object_id, [name], auto_drop
FROM sys.stats;