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
SQL-adatbázis a Microsoft Fabricben
Ez a cikk azt ismerteti, hogyan hozhat létre elsődleges és másodlagos XML-indexeket.
Elsődleges XML-index létrehozása
Elsődleges XML-index létrehozásához használja a CREATE INDEX (Transact-SQL)Transact-SQL DDL-utasítást. Az XML-indexek esetében nem támogatott minden beállítás, ami nem-XML indexeknél elérhető.
Xml-index létrehozásakor vegye figyelembe a következőket:
Elsődleges XML-index létrehozásához az indexelt XML-oszlopot tartalmazó táblának ( az alaptáblának) fürtözött indexet kell tartalmaznia az elsődleges kulcson. Ez a fürtözött index gondoskodik arról, hogy az alaptábla particionálása esetén az elsődleges XML-indexet ugyanazzal a particionálási sémával és particionálási függvénnyel lehessen particionelni.
Ha létezik XML-index, a tábla elsődleges kulcsa nem módosítható. Az elsődleges kulcs módosítása előtt törölnie kell az összes XML-indexet a tábláról.
Az elsődleges XML-indexek egyetlen XML- típusú oszlopon hozhatók létre. Az xml típusú oszlop kulcsoszlopként nem hozható létre más típusú index. Az xml típusú oszlopot azonban belefoglalhatja egy nem XML-indexbe. A tábla minden xml- típusú oszlopának saját elsődleges XML-indexe lehet. Azonban csak egy elsődleges XML-index engedélyezett xml- típusú oszloponként.
Az XML-indexek ugyanabban a névtérben találhatók, mint a nem XML-indexek. Ezért nem lehet XML-index és nem XML-index ugyanazon a táblán ugyanazzal a névvel.
IGNORE_DUP_KEY és ONLINE beállításai az XML-indexek esetében mindig ki vannak kapcsolva. Ezeket a beállításokat a KI értékével adhatja meg.
A felhasználói tábla fájlcsoport- vagy particionálási adatai az XML-indexre lesznek alkalmazva, és nem adhatók meg külön.
A DROP_EXISTING index lehetőség elvethet egy elsődleges XML-indexet, és létrehozhat egy új elsődleges XML-indexet, vagy elvethet egy másodlagos XML-indexet, és létrehozhat egy új másodlagos XML-indexet. Ez a beállítás azonban nem tud elvetni egy másodlagos XML-indexet egy új elsődleges XML-index létrehozásához, vagy fordítva.
Az elsődleges XML-indexnevekre ugyanazok a korlátozások vonatkoznak, mint a nézetnevekre.
Nem hozhat létre XML-indexet egy nézet xml típusú oszlopán, egy táblában értékváltozót tartalmazó oszlopokon xml típusú, vagy xml típusú változókon.
Ha egy XML- típusú oszlopot nem típusos XML-ről típusos XML-re szeretne módosítani, vagy fordítva, az ALTER TABLE ALTER COLUMN beállítással nem létezhet XML-index az oszlopon. Ha létezik ilyen, el kell dobni az oszloptípus-módosítási kísérlet előtt.
Az ARITHABORT beállítást BE értékre kell állítani egy XML-index létrehozásakor. Az XML-oszlop értékeinek lekérdezéséhez, beszúrásához, törléséhez vagy frissítéséhez xml adattípus-metódusok használatával ugyanezt a beállítást kell beállítani a kapcsolaton. Ha nem, az xml adattípus-metódusok sikertelenek lesznek.
Jegyzet
Az XML-indexekkel kapcsolatos információk a katalógusnézetekben találhatók. A sp_helpindex azonban nem támogatott. A témakör későbbi részében ismertetett példák bemutatják, hogyan kérdezhetők le a katalógusnézetek az XML-index információinak megkereséséhez.
Ha egy XML- adattípus-oszlopban egy elsődleges XML-indexet hoz létre vagy hoz újra létre, amely xs:date vagy xs:dateTime (vagy ezen típusok altípusai) XML-sématípusok 1 évnél korábbi értékeit tartalmazza, az index létrehozása sikertelen lesz az SQL Server 2008 (10.0.x) és újabb verzióiban. Az SQL Server 2005 (9.x) engedélyezte ezeket az értékeket, így ez a probléma akkor fordulhat elő, ha indexeket hoz létre egy SQL Server 2005-ben létrehozott adatbázisban (9.x). További információ: A gépelt XML és a nem beírt XMLösszehasonlítása.
Példa: Elsődleges XML-index létrehozása
A legtöbb példában egy nem beírt XML-oszlopot tartalmazó táblázat T (pk INT PRIMARY KEY, xCol XML) használ. Ez a példa egyszerűen kiterjeszthető beírt XML-fájlra. Az egyszerűség kedvéért a lekérdezések az XML-adatpéldányokhoz tartoznak, ahogyan az alábbi példában is látható:
<book genre="security" publicationdate="2002" ISBN="0-7356-1588-2">
<title>Writing Secure Code</title>
<author>
<first-name>Michael</first-name>
<last-name>Howard</last-name>
</author>
<author>
<first-name>David</first-name>
<last-name>LeBlanc</last-name>
</author>
<price>39.99</price>
</book>
Az alábbi utasítás létrehoz egy idx_xColnevű XML-indexet a xColtábla XML-oszlopában T:
CREATE PRIMARY XML INDEX idx_xCol on T (xCol)
Másodlagos XML-index létrehozása
A CREATE INDEX (Transact-SQL)Transact-SQL DDL-utasítással másodlagos XML-indexeket hozhat létre, és megadhatja a kívánt másodlagos XML-index típusát.
A másodlagos XML-indexek létrehozásakor vegye figyelembe a következőket:
A másodlagos XML-indexeken az összes olyan indexelési beállítás engedélyezett, amely egy nemclustered indexre vonatkozik, kivéve a IGNORE_DUP_KEY és az ONLINE beállítást. A másodlagos XML-indexek esetében a két beállítást mindig KI értékre kell állítani.
A másodlagos indexek particionálása ugyanúgy, mint az elsődleges XML-index.
DROP_EXISTING elvethet egy másodlagos indexet a felhasználói táblában, és létrehozhat egy másik másodlagos indexet a felhasználói táblában.
Az XML-index információinak lekéréséhez lekérdezheti a sys.xml_indexek katalógusnézetét. A sys.xml_indexes katalógusnézet secondary_type_desc oszlopa a másodlagos index típusát adja meg:
SELECT *
FROM sys.xml_indexes;
A secondary_type_desc oszlopban visszaadott értékek lehetnek NULL, PATH, VALUE vagy PROPERTY. Az elsődleges XML-index esetében a visszaadott érték NULL.
Példa: Másodlagos XML-indexek létrehozása
Az alábbi példa a másodlagos XML-indexek létrehozását mutatja be. A példa a létrehozott XML-indexekről is tartalmaz információkat.
CREATE TABLE T (Col1 INT PRIMARY KEY, XmlCol XML);
GO
-- Create primary index.
CREATE PRIMARY XML INDEX PIdx_T_XmlCol
ON T(XmlCol);
GO
-- Create secondary indexes (PATH, VALUE, PROPERTY).
CREATE XML INDEX PIdx_T_XmlCol_PATH ON T(XmlCol)
USING XML INDEX PIdx_T_XmlCol
FOR PATH;
GO
CREATE XML INDEX PIdx_T_XmlCol_VALUE ON T(XmlCol)
USING XML INDEX PIdx_T_XmlCol
FOR VALUE;
GO
CREATE XML INDEX PIdx_T_XmlCol_PROPERTY ON T(XmlCol)
USING XML INDEX PIdx_T_XmlCol
FOR PROPERTY;
GO
Az XML-indexek adatainak lekéréséhez lekérdezheti a sys.xml_indexes katalógusnézetet. A secondary_type_desc oszlop a másodlagos indextípust biztosítja.
SELECT *
FROM sys.xml_indexes;
A katalógusnézetből is lekérdezheti az indexinformációkat.
SELECT *
FROM sys.xml_indexes
WHERE object_id = object_id('T');
Hozzáadhat mintaadatokat, majd áttekintheti az XML-index adatait.
INSERT INTO T VALUES (1,
'<doc id="123">
<sections>
<section num="2">
<heading>Background</heading>
</section>
<section num="3">
<heading>Sort</heading>
</section>
<section num="4">
<heading>Search</heading>
</section>
</sections>
</doc>');
GO
-- Check XML index information.
SELECT *
FROM sys.dm_db_index_physical_stats (db_id(), object_id('T'), NULL, NULL, 'DETAILED');
GO
-- Space usage of primary XML index
DECLARE @index_id int;
SELECT @index_id = i.index_id
FROM sys.xml_indexes i
WHERE i.name = 'PIdx_T_XmlCol' and object_name(i.object_id) = 'T';
SELECT *
FROM sys.dm_db_index_physical_stats (db_id(), object_id('T') , @index_id, DEFAULT, 'DETAILED');
GO
--- Space usage of secondary XML index (for example PATH secondary index) PIdx_T_XmlCol_PATH
DECLARE @index_id int;
SELECT @index_id = i.index_id
FROM sys.xml_indexes i
WHERE i.name = 'PIdx_T_XmlCol_PATH' and object_name(i.object_id) = 'T';
SELECT *
FROM sys.dm_db_index_physical_stats (db_id(), object_id('T') , @index_id, DEFAULT, 'DETAILED');
GO
-- Space usage of all secondary XML indexes for a particular table
SELECT i.name, object_name(i.object_id), stats.*
FROM sys.dm_db_index_physical_stats (db_id(), object_id('T'), NULL, DEFAULT, 'DETAILED') stats
JOIN sys.xml_indexes i ON (stats.object_id = i.object_id and stats.index_id = i.index_id)
WHERE secondary_type is not null;
-- Drop secondary indexes.
DROP INDEX PIdx_T_XmlCol_PATH ON T;
GO
DROP INDEX PIdx_T_XmlCol_VALUE ON T;
GO
DROP INDEX PIdx_T_XmlCol_PROPERTY ON T;
GO
-- Drop primary index.
DROP INDEX PIdx_T_XmlCol ON T;
-- Drop table T.
DROP TABLE T;
GO
Lásd még:
- XML-indexek (SQL Server)
- XML-adatok (SQL Server)