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 2025 (17.x)
Létrehoz egy JSON indexet egy meghatározott táblán és oszlopon az SQL Server 2025 (17.x) fájlban.
JSON-indexek:
- Létre lehet hozni, mielőtt a táblában vannak adatok.
- Egy másik adatbázisban lévő táblákon egy minősített adatbázisnév megadásával hozható létre.
- A táblának klaszteres elsődleges kulccsal kell rendelkeznie.
- Indexelt nézetekben nem adható meg.
Megjegyzés:
A JSON indexek létrehozása jelenleg előnézetben van, és csak SQL Server 2025 (17.x) verzióban érhető el.
Transact-SQL szintaxis konvenciók
Szemantika
CREATE JSON INDEX name ON table_name (json_column_name)
[ FOR ( sql_json_path [ , ...n ] ) ]
[ WITH ( <json_index_option> [ , ...n ] ) ]
[ ON { filegroup_name | "default" } ]
[ ; ]
<object> ::=
{ database_name.schema_name.table_name | schema_name.table_name | table_name }
<sql_json_path> ::=
{ character_string_literal }
<json_index_option> ::=
{
OPTIMIZE_FOR_ARRAY_SEARCH = { ON | OFF }
| FILLFACTOR = fillfactor
| DROP_EXISTING = { ON | OFF }
| ONLINE = OFF
| ALLOW_ROW_LOCKS = { ON | OFF }
| ALLOW_PAGE_LOCKS = { ON | OFF }
| MAXDOP = max_degree_of_parallelism
| DATA_COMPRESSION = { NONE | ROW | PAGE }
}
Érvek
index_name
Az index neve. Az indexneveknek egyedinek kell lenniük egy táblában, de nem kell egyedinek lenniük az adatbázisban. Az indexneveknek az azonosítók szabályait kell követnie.
ON <objektum> ( json_column_name )
Megadja azt az objektumot (adatbázist, sémát vagy táblát), amelyen az indexet létre szeretné hozni, valamint a json oszlop nevét.
json_column_name
A json-adattípus oszlopának neve, amely a
table_namemegadott SQL/JSON-elérési utak közül nullát vagy többet tartalmaz.sql_json_path
A
json_column_name-ből kinyerni és indexelni kívánt SQL/JSON elérési út. Az alapértelmezett érték asql_json_pathkövetkező$: .- Rekurzív módon indexeli a megadott elérési út összes kulcsát/értékét.
- A JSON-dokumentum elérési útjának legfeljebb 128 szintjét támogatja.
- Nem engedélyezi az átfedést.
Például
$.a$.a.bhibát jelez, mivel az elérési út$.arekurzív módon tartalmazza az összes elérési utat, és a felhasználói szándék nem egyértelmű.
A filegroup_name
Létrehozza a megadott indexet a megadott fájlcsoporton. Ha nincs megadva hely, és a tábla nincs particionálva, az index ugyanazt a fájlcsoportot használja, mint az alapul szolgáló tábla. A fájlcsoportnak már léteznie kell.
ON "default" (alapértelmezett)
Létrehozza a megadott indexet az alapértelmezett fájlcsoporton.
Ebben a kontextusban az alapértelmezett kifejezés nem kulcsszó. Ez az alapértelmezett fájlcsoport azonosítója, és el kell tagoltnak lennie, mint a fájlban vagy ON "default"a fájlbanON [default]. Ha "default" meg van adva, a QUOTED_IDENTIFIER beállításnak az aktuális munkamenethez kell lennie ON . Ez az alapértelmezett beállítás. További információ: SET QUOTED_IDENTIFIER.
<objektum>:: =
A teljesen vagy nem teljesen kvalifikált objektum, amelyet indexelni kell.
database_name
Az adatbázis neve.
schema_name
Annak a sémának a neve, amelyhez a tábla tartozik.
table_name
Az indexelendő tábla neve.
OPTIMIZE_FOR_ARRAY_SEARCH = { ON | KI }
Megadja, hogy a tömbkeresések optimalizálva vannak-e a JSON-indexben. Az alapértelmezett érték a OFF.
FILLFACTOR = fillfactor
Százalékos értéket ad meg, amely azt jelzi, hogy az adatbázismotornak mennyire kell az egyes indexlapok levélszintjének szintjét létrehoznia az index létrehozása vagy újraépítése során.
A fillfactor értékének egész számnak kell lennie a következőtől 1 a következőig 100: . Az alapértelmezett érték a 0. Ha a fillfactor értéke 100 vagy 0, az adatbázismotor olyan indexeket hoz létre, amelyek levéloldalai kapacitásra vannak kitöltve.
Megjegyzés:
A faktorértékek 0 és 100 minden szempontból azonosak.
A FILLFACTOR beállítás csak az index létrehozásakor vagy újraépítésekor érvényes. Az adatbázismotor nem tartja dinamikusan a lapokban megadott üres terület százalékos arányát. A kitöltési tényező beállításának megtekintéséhez használja a sys.indexes katalógusnézetet.
Fürtözött index létrehozása FILLFACTOR kisebb, mint 100, befolyásolja az adatok által elfoglalt tárterületet, mivel az adatbázismotor újraosztja az adatokat a fürtözött index létrehozásakor.
További információ: Kitöltési tényező megadása index.
DROP_EXISTING = { ON | KI }
A névvel ellátott, már létező JSON-index elvetését és újraépítését adja meg. Az alapértelmezett érték a OFF.
BE
A meglévő indexet törlik és újjáépítik. A megadott indexnévnek meg kell egyeznie a jelenleg meglévő index nevével; azonban az indexdefiníció módosítható. Megadhat például különböző oszlopokat, rendezési sorrendet, partíciós sémát vagy indexbeállításokat.
KI
Hiba jelenik meg, ha a megadott indexnév már létezik.
Az index típusa nem módosítható a használatával DROP_EXISTING.
ONLINE = KIKAPCSOLVA
Azt határozza meg, hogy az alapul szolgáló táblák és a kapcsolódó indexek nem érhetők el a lekérdezésekhez és az adatok módosításához az indexművelet során. Az SQL Server ezen verziójában az online indexek összeállítása nem támogatott A JSON-indexek esetében. Ha ez a beállítás JSON-indexre van állítva ON , a rendszer hibát jelez. Hagyja ki a ONLINE opciót, vagy állítsa ONLINE-t OFF-re.
Egy offline indexművelet, amely létrehoz, újraépít vagy elvet egy JSON-indexet, sémamódosítási (Sch-M) zárolást szerez be a táblán. Ez megakadályozza, hogy a művelet időtartama alatt minden felhasználó hozzáférjen a mögöttes táblához.
Az online indexelési műveletek nem érhetők el az SQL Server minden kiadásában.
Az SQL Server windowsos kiadásai által támogatott funkciók listáját a következő témakörben találja:
- Az SQL Server 2025 kiadásai és támogatott funkciói
- SQL Server 2022 kiadásai és támogatott funkciói
- SQL Server 2019 kiadásai és támogatott funkciói
- SQL Server 2017 kiadásai és támogatott funkciói
- SQL Server 2016- kiadásai és támogatott funkciói
ALLOW_ROW_LOCKS = { ON | KI }
Megadja, hogy engedélyezettek-e a sorzárolások. Az alapértelmezett érték a ON.
BE
Az index elérésekor sorzárolások engedélyezettek. Az adatbázismotor határozza meg a sorzárolások használatát.
KI
A sorzárak nem használhatók.
ALLOW_PAGE_LOCKS = { ON | KI }
Megadja, hogy engedélyezettek-e az oldalzárolások. Az alapértelmezett érték a ON.
BE
Az index elérésekor az oldalzárolások engedélyezettek. Az adatbázismotor határozza meg az oldalzárolások használatát.
KI
Az oldalzárakat nem használja a rendszer.
MAXDOP = max_degree_of_parallelism
Felülbírálja az max degree of parallelism indexművelet időtartamára vonatkozó konfigurációs beállítást. 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.
Fontos
Bár a MAXDOP lehetőség szintaktikailag támogatott, CREATE JSON INDEX jelenleg csak egyetlen processzort használ.
max_degree_of_parallelism az alábbi értékek egyike lehet.
| Érték | Leírás |
|---|---|
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 vagy annál kevesebbre korlátozza az aktuális rendszerterhelés alapján. |
0 (alapértelmezett) |
A processzorok tényleges számát használja, vagy kevesebbet az aktuális rendszerterhelés alapján. |
További információ: Párhuzamos indexelési műveletek konfigurálása.
A párhuzamos indexműveletek nem érhetők el az SQL Server minden kiadásában.
Az SQL Server windowsos kiadásai által támogatott funkciók listáját a következő témakörben találja:
- Az SQL Server 2025 kiadásai és támogatott funkciói
- SQL Server 2022 kiadásai és támogatott funkciói
- SQL Server 2019 kiadásai és támogatott funkciói
- SQL Server 2017 kiadásai és támogatott funkciói
- SQL Server 2016- kiadásai és támogatott funkciói
DATA_COMPRESSION = { NONE | SOR | PAGE }
Meghatározza az index által használt adattömörítés szintjét.
Egyik sem
Az index nem használ tömörítést az adatokhoz
SOR
Az index által az adatokon használt sortömörítés
OLDAL
Az index által az adatokon használt laptömörítés
Megjegyzések
Minden beállítás csak egyszer adható meg utasításonként CREATE JSON INDEX. Ha egy beállítás duplikátumát adja meg, az hibát jelez.
[ ON { filegroup_name | "alapértelmezett" } ]
Ha egy JSON-indexhez fájlcsoportot ad meg, az index az adott fájlcsoportra kerül, függetlenül a tábla particionálási sémájától.
Az indexek létrehozásával kapcsolatos további információkért tekintse meg az INDEX LÉTREHOZÁSA szakasz Megjegyzések szakaszát.
JSON-indextel támogatott predikátumok
A tábla JSON-oszlopában található JSON-dokumentumokon végzett keresési műveletek optimalizálhatók, ha a JSON-oszlopban JSON-index található. A JSON-index különböző JSON-függvényalapú kifejezéseket tartalmazó lekérdezésekben használatos.
Az alábbi példák az Sales.SalesOrderHeader adatbázisban lévő AdventureWorks2025 táblát használják egy json nevű Infooszlopmal. Az Info oszlop JSON-típusként jön létre. A JSON-index az alapértelmezett beállításokkal rendelkező oszlopon Info is létrejön. Az alábbi kódminta az utasítást CREATE JSON INDEX mutatja be:
CREATE JSON INDEX sales_info_idx
ON Sales.SalesOrderHeader (Info);
A minta keresési kifejezésekhez használja az alábbi JSON-dokumentumokat adatként:
| Értékesítési rendelés száma | Információ |
|---|---|
437 |
{"Customer":{"Name":"Kelsey Raje","ID":16517,"Type":"IN"},"Order":{"ID":43710,"Number":"SO43710","CreationDate":"2011-06-02T00:00:00","TotalDue":3953.9884}} |
643 |
{"Customer":{"Name":"Aaron Campbell","ID":16167,"Type":"IN"},"Order":{"ID":64304,"Number":"SO64304","CreationDate":"2014-01-16T00:00:00","TotalDue":36.0230, "IsProcessed": true}} |
JSON_PATH_EXISTS függvény
A JSON_PATH_EXISTS függvénnyel tesztelheti, hogy létezik-e egy megadott SQL/JSON-elérési út egy JSON-dokumentumban.
Ez a lekérdezés JSON_PATH_EXISTS egy JSON-oszlopon mutatja be, amely JSON-index használatával optimalizálható:
SELECT COUNT(*)
FROM Sales.SalesOrderHeader
WHERE JSON_PATH_EXISTS(Info, '$.Order.IsProcessed') = 1;
A JSON indexet a JSON_PATH_EXISTS predikátummal és a következő operátorokkal támogatják:
- Összehasonlító operátorok (
=) -
IS [NOT] NULLpredikátum (jelenleg nem támogatott)
JSON_VALUE függvény
A JSON_VALUE használatával kinyerheti a JSON-szöveg/skaláris értéket egy adott SQL/JSON-elérési úton egy JSON-dokumentumban. Az alábbi lekérdezések bemutatják, hogyan optimalizálható egy JSON_VALUEJSON-oszlop kifejezése JSON-index használatával.
JSON-sztring egyenlőségi keresése objektumtulajdonságokban:
SELECT COUNT(*) FROM Sales.SalesOrderHeader WHERE JSON_VALUE(Info, '$.Customer.Type') = 'IN';Egy objektumtulajdonság JSON-számának egyenlőségi keresése az érték int adattípussá alakítása után:
SELECT * FROM Sales.SalesOrderHeader WHERE JSON_VALUE(Info, '$.Customer.ID' RETURNING INT) = 16167;Egy objektumtulajdonság JSON-számának tartománykeresése az érték int adattípussá alakítása után:
SELECT * FROM Sales.SalesOrderHeader WHERE JSON_VALUE(Info, '$.Customer.ID' RETURNING INT) IN (16167, 16517);Egy objektumtulajdonság JSON-számának tartománykeresése az érték decimális adattípussá alakítása után:
SELECT * FROM Sales.SalesOrderHeader WHERE JSON_VALUE(Info, '$.Order.TotalDue RETURNING decimal(20, 4)) BETWEEN 1000 and 2000;
A JSON-indexet predikátum és a következő operátorok támogatják JSON_VALUE :
- Összehasonlító operátorok (
=) -
LIKEpredikátum (jelenleg nem támogatott) -
IS [NOT] NULLpredikátum (jelenleg nem támogatott)
JSON_CONTAINS függvény
A JSON_CONTAINS függvény támogatja az olyan JSON-dokumentumok JSON-értékeinek egyszerű keresését, amelyek JSON-indexet használhatnak, ha json-oszlopban vannak. Ez a függvény használható annak ellenőrzésére, hogy egy JSON-skaláris érték, objektum vagy tömb szerepel-e egy JSON-dokumentumban megadott SQL/JSON-elérési úton. Az SQL skaláris típusokként megadott keresési értékek konvertálása meglévő SQL/JSON-típusátalakítások alapján. Ezek a szabályok a viselkedési szakaszban vannak definiálva.
Követelmény
A JSON oszlopot tartalmazó táblában fürtkulccsal kell rendelkeznie. A fürtkulccsal kapcsolatos hiba akkor jelenik meg, ha a fürtkulccsal nem rendelkezik. A fürtözési kulcs legfeljebb 31 oszlopból áll, és az indexkulcs maximális méretének 128 bájtnál kisebbnek kell lennie.
Engedélyek
A felhasználónak engedéllyel kell rendelkeznie ALTER a táblában, vagy tagja kell lennie a sysadmin rögzített kiszolgálói szerepkörnek, vagy a db_ddladmin és db_owner rögzített adatbázis-szerepköröknek.
Korlátozások
A JSON-indexutasításra a következő korlátozások vonatkoznak:
- Egy tábla JSON-oszlopán csak egy JSON-index hozható létre.
- Legfeljebb 249 JSON-indexet hozhat létre egy táblában. Egynél több JSON-index létrehozása egy adott JSON-oszlopon nem támogatott.
- A JSON-index nem hozható létre számított JSON-oszlopokon .
- JSON-index nem hozható létre nézetben, táblaértékes változóban vagy memóriaoptimalizált táblában lévő JSON-oszlopokon .
- A JSON-indexek csak offline módon hozhatók létre vagy módosíthatók.
- A JSON-útvonalak nem fedhetik át egymást az indexdefinícióban. Például átfedésben
$a$a.b, és nem engedélyezett azCREATE JSON INDEXutasításban. - Az elérési utak módosításához újra kell használni a JSON-indexet.
- A JSON-indexek nem támogatottak az indexmutatókban.
- Az adattömörítési beállítás nem támogatott.
Példák
Egy. JSON-index létrehozása JSON-oszlopon
Az alábbi példa létrehoz egy docs típusú oszlopot tartalmazó táblátcontent. A példa ezután létrehoz egy JSON-indexet json_content_indexaz content oszlopban. A példa létrehozza a json-indexet a teljes JSON-dokumentumon vagy a JSON-dokumentumban található összes SQL/JSON-útvonalon.
DROP TABLE IF EXISTS docs;
CREATE TABLE docs
(
content JSON,
id INT PRIMARY KEY
);
CREATE JSON INDEX json_content_index
ON docs (content);
Egy. JSON-index létrehozása adott elérési utakkal rendelkező JSON-oszlopon
Az alábbi példa létrehoz egy docs típusú oszlopot tartalmazó táblátcontent. A példa ezután létrehoz egy JSON-indexet json_content_indexaz content oszlopban. A példa létrehozza a JSON-indexet a JSON-dokumentumban található adott SQL/JSON-útvonalakon.
A példa a FILLFACTOR indexet is a következőre 80állítja: .
DROP TABLE IF EXISTS docs;
CREATE TABLE docs
(
content JSON,
id INT PRIMARY KEY
);
CREATE JSON INDEX json_content_index
ON docs (content)
FOR ('$.a', '$.b') WITH (FILLFACTOR = 80);
B. JSON-index tömbkeresés-optimalizálással
Az alábbi példa a tábla dbo.CustomersJSON-indexeit adja vissza. A JSON-index úgy jön létre, hogy engedélyezve van a tömbkeresés optimalizálási lehetősége.
DROP TABLE IF EXISTS dbo.Customers;
CREATE TABLE dbo.Customers
(
customer_id INT IDENTITY PRIMARY KEY,
customer_info JSON NOT NULL
);
CREATE JSON INDEX CustomersJsonIndex
ON dbo.Customers (customer_info) WITH (OPTIMIZE_FOR_ARRAY_SEARCH = ON);
INSERT INTO dbo.Customers (customer_info)
VALUES ('{"name":"customer1", "email": "customer1@example.com", "phone":["123-456-7890", "234-567-8901"]}');
SELECT object_id,
index_id,
optimize_for_array_search
FROM sys.json_indexes AS ji
WHERE object_id = OBJECT_ID('dbo.Customers');