Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
I den här artikeln beskrivs hur du skapar primära och sekundära XML-index.
Skapa ett primärt XML-index
Om du vill skapa ett primärt XML-index använder du CREATE INDEX (Transact-SQL)Transact-SQL DDL-instruktion. Alla alternativ som är tillgängliga för icke-XML-index stöds inte i XML-index.
Observera följande när du skapar ett XML-index:
Om du vill skapa ett primärt XML-index måste tabellen som innehåller XML-kolumnen som indexeras, kallad bastabellen, ha ett klustrat index på primärnyckeln. Det här klustrade indexet säkerställer att om bastabellen partitioneras kan det primära XML-indexet partitioneras med hjälp av samma partitioneringsschema och partitioneringsfunktion.
Om det finns ett XML-index kan den klustrade primärnyckeln i tabellen inte ändras. Du måste släppa alla XML-index i tabellen innan du ändrar primärnyckeln.
Ett primärt XML-index kan skapas på en enda xml- typkolumn. Du kan inte skapa någon annan typ av index med XML- typkolumn som en nyckelkolumn. Du kan dock inkludera kolumnen xml- i ett icke-XML-index. Varje XML- typkolumn i en tabell kan ha ett eget primärt XML-index. Endast ett primärt XML-index per xml- typkolumn tillåts dock.
XML-index finns i samma namnområde som icke-XML-index. Därför kan du inte ha ett XML-index och ett icke-XML-index i samma tabell med samma namn.
Alternativen IGNORE_DUP_KEY och ONLINE är alltid inställda på OFF för XML-index. Du kan ange de här alternativen med värdet OFF.
Filgruppen eller partitioneringsinformationen i användartabellen tillämpas på XML-indexet och kan inte anges separat.
Alternativet DROP_EXISTING index kan släppa ett primärt XML-index och skapa ett nytt primärt XML-index, eller släppa ett sekundärt XML-index och skapa ett nytt sekundärt XML-index. Det här alternativet kan dock inte släppa ett sekundärt XML-index för att skapa ett nytt primärt XML-index eller tvärtom.
Primära XML-indexnamn har samma begränsningar som visningsnamn.
Du kan inte skapa ett XML-index på en xml- typkolumn i en vy, i en tabell värdevariabel med xml- typkolumner eller xml- typvariabler.
sv-SE: Om du vill ändra en XML- typkolumn från otypad till typerad XML, eller vice versa, med alternativet ALTER TABLE ALTER COLUMN bör det inte finnas något XML-index på kolumnen. Om det finns en måste den tas bort innan kolumntypsändringen provas.
Alternativet ARITHABORT måste anges till PÅ när ett XML-index skapas. Om du vill ställa frågor mot, infoga, ta bort eller uppdatera värden i XML-kolumnen med hjälp av XML- datatypsmetoder måste samma alternativ anges för anslutningen. Om så inte är fallet, kommer metoder för xml- datatyper att misslyckas.
Not
Information om ett XML-index finns i katalogvyer. Men sp_helpindex stöds inte. Exempel som visas senare i det här avsnittet visar hur du frågar katalogvyerna för att hitta XML-indexinformation.
När du skapar eller återskapar ett primärt XML-index på en XML- datatypkolumn som innehåller värden för XML-schematyperna xs:date eller xs:dateTime (eller några undertyper av dessa typer) som har ett år på mindre än 1, misslyckas indexskapandet i SQL Server 2008 (10.0.x) och senare versioner. SQL Server 2005 (9.x) tillät dessa värden, så det här problemet kan uppstå när du skapar index i en databas som genereras i SQL Server 2005 (9.x). Mer information finns i Compare Typed XML to Untyped XML.
Exempel: Skapa ett primärt XML-index
Tabell T (pk INT PRIMARY KEY, xCol XML) med en otypad XML-kolumn används i de flesta av exemplen. Det här exemplet kan utökas till att skriva XML på ett enkelt sätt. För enkelhetens skull beskrivs frågor för XML-datainstanser enligt följande exempel:
<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>
Följande instruktion skapar ett XML-index med namnet idx_xColi XML-kolumnen xCol i tabellen T:
CREATE PRIMARY XML INDEX idx_xCol on T (xCol)
Skapa ett sekundärt XML-index
Använd CREATE INDEX (Transact-SQL)Transact-SQL DDL-instruktionen för att skapa sekundära XML-index och ange vilken typ av sekundärt XML-index du vill använda.
Observera följande när du skapar sekundära XML-index:
Alla indexeringsalternativ som gäller för ett icke-grupperat index, förutom IGNORE_DUP_KEY och ONLINE, är tillåtna för sekundära XML-index. De två alternativen måste alltid anges till AV för sekundära XML-index.
De sekundära indexen partitioneras precis som det primära XML-indexet.
DROP_EXISTING kan släppa ett sekundärt index i användartabellen och skapa ett annat sekundärt index i användartabellen.
Du kan använda sys.xml_indexes katalogvyn för att hämta XML-indexinformation. Kolumnen secondary_type_desc i sys.xml_index katalogvyn innehåller typen av sekundärt index:
SELECT *
FROM sys.xml_indexes;
Värdena som returneras i kolumnen secondary_type_desc kan vara NULL, PATH, VALUE eller PROPERTY. För det primära XML-indexet är värdet som returneras NULL.
Exempel: Skapa sekundära XML-index
I följande exempel visas hur sekundära XML-index skapas. Exemplet visar också information om DE XML-index som du skapade.
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
Du kan fråga katalogvyn sys.xml_indexes för att hämta information om XML-index. Kolumnen secondary_type_desc innehåller den sekundära indextypen.
SELECT *
FROM sys.xml_indexes;
Du kan också använda katalogvyn för indexinformation.
SELECT *
FROM sys.xml_indexes
WHERE object_id = object_id('T');
Du kan lägga till exempeldata och sedan granska XML-indexinformationen.
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