SKAPA XML-INDEX (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Skapar ett XML-index på en specificerad tabell. Ett index kan skapas innan det finns data i tabellen. XML-index kan skapas på tabeller i en annan databas genom att ange ett kvalificerat databasnamn.

Anmärkning

För att skapa ett relationsindex, se SKAPA INDEX (Transact-SQL). För information om hur man skapar ett rumsligt index, se CREATE SPATIAL INDEX (Transact-SQL).

Transact-SQL syntaxkonventioner

Syntax

--Create XML Index   
CREATE [ PRIMARY ] XML INDEX index_name
    ON <object> ( xml_column_name )
    [ USING XML INDEX xml_index_name
        [ FOR { VALUE | PATH | PROPERTY } ] ]
    [ WITH ( <xml_index_option> [ ,...n ] ) ]
[ ; ]

<object> ::=
{ database_name.schema_name.table_name | schema_name.table_name | table_name }

<xml_index_option> ::=
{
    PAD_INDEX  = { ON | OFF }
  | FILLFACTOR = fillfactor
  | SORT_IN_TEMPDB = { ON | OFF }
  | IGNORE_DUP_KEY = OFF
  | DROP_EXISTING = { ON | OFF }
  | ONLINE = OFF
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | XML_COMPRESSION = { ON | OFF }
}

Arguments

[PRIMÄR] XML

Skapar ett XML-index i den angivna xml-kolumnen . När PRIMARY anges skapas ett klustrat index med den klustrade nyckeln bildas från klustringsnyckeln i användartabellen och en XML-nodidentifierare. Varje tabell kan ha upp till 249 XML-index. Observera följande när du skapar ett XML-index:

  • Ett klustrat index måste finnas på den primära nyckeln i användartabellen.

  • Klustringsnyckeln i användartabellen är begränsad till 15 kolumner.

  • Varje xml-kolumn i en tabell kan ha ett primärt XML-index och flera sekundära XML-index.

  • Ett primärt XML-index på en xml-kolumn måste finnas innan ett sekundärt XML-index kan skapas på kolumnen.

  • Ett XML-index kan endast skapas på en enda xml-kolumn . Du kan inte skapa ett XML-index på en icke-xml-kolumn , och du kan inte heller skapa ett relationsindex på en xml-kolumn .

  • Du kan inte skapa ett XML-index, varken primärt eller sekundärt, på en xml-kolumn i en vy, på en tabellvärd variabel med xml-kolumner , eller xml-typvariabler .

  • Du kan inte skapa ett primärt XML-index på en beräknad XML-kolumn .

  • SET-inställningarna måste vara desamma som krävs för indexerade vyer och beräknade kolumnindex. Specifikt måste alternativet ARITHABORT ställas in till PÅ när ett XML-index skapas och vid insättning, radering eller uppdatering av värden i xml-kolumnen.

Mer information finns i XML-index (SQL Server).

index_name

Namnet på indexet. Indexnamn måste vara unika i en tabell men behöver inte vara unika i en databas. Indexnamn måste följa reglerna för identifierare.

Primära XML-indexnamn kan inte börja med följande tecken: #, ##, @, eller @@.

xml_column_name

Den xml-kolumn som indexet baseras på. Endast en xml-kolumn kan specificeras i en enda XML-indexdefinition; dock kan flera sekundära XML-index skapas på en XML-kolumn .

ANVÄNDNING AV XML INDEX xml_index_name

Specificerar det primära XML-indexet som ska användas vid skapandet av ett sekundärt XML-index.

FÖR { VÄRDE | VÄG | EGENSKAP }

Specificerar typen av sekundärt XML-index.

VALUE
Skapar ett sekundärt XML-index på kolumner där nyckelkolumner är (nodvärde och sökväg) för det primära XML-indexet.

Sökväg
Skapar ett sekundärt XML-index på kolumner byggda på sökvägsvärden och nodvärden i det primära XML-indexet. I PATH:s sekundära index är väg- och nodvärden nyckelkolumner som möjliggör effektiva sökningar vid sökning efter vägar.

EGENSKAP
Skapar ett sekundärt XML-index på kolumner (PK, sökväg och nodvärde) i det primära XML-indexet där PK är primärnyckeln i bastabellen.

<objekt>::=

Det fullständigt kvalificerade eller icke-kvalificerade objekt som ska indexeras.

database_name
Namnet på databasen.

schema_name
Namnet på schemat som tabellen tillhör.

table_name
Namnet på den tabell som ska indexeras.

<xml_index_option> ::=

Anger vilka alternativ som ska användas när du skapar indexet.

PAD_INDEX = { ON | AV }

Anger indexutfyllnad. Standardinställningen är AV.

ON
Den procentandel ledigt utrymme som specificeras av fillfactor tillämpas på mellannivåerna i indexet.

OFF eller fillfactor specificeras inte
Sidorna på mellannivå fylls till nära kapacitet, vilket ger tillräckligt med utrymme för minst en rad av den maximala storlek som indexet kan ha, med tanke på uppsättningen nycklar på mellanliggande sidor.

Alternativet PAD_INDEX är användbart endast när FILLFACTOR är specificerad, eftersom PAD_INDEX använder procentsatsen som anges av FILLFACTOR. Om procentsatsen som anges för FILLFACTOR inte är tillräckligt stor för att tillåta en rad, överskrider databasmotorn internt procentsatsen för att tillåta minimum. Antalet rader på en mellanliggande indexsida är aldrig mindre än två, oavsett hur lågt fillfactorvärdet är.

FILLFACTOR = fillfaktor

Anger en procentandel som anger hur full databasmotorn ska göra lövnivån för varje indexsida när index skapas eller återskapas. fillfactor måste vara ett heltalsvärde från 1 till 100. Standardvärdet är 0. Om fillfactor är 100 eller 0 skapar databasmotorn index med bladsidor fyllda till kapacitet.

Anmärkning

Fyllningsfaktorvärdena 0 och 100 är desamma i alla avseenden.

FILLFACTOR-inställningen gäller endast när indexet skapas eller byggs om. Databasmotorn behåller inte dynamiskt den angivna procentandelen tomt utrymme på sidorna. Om du vill visa fyllningsfaktorinställningen använder du katalogvyn sys.indexes .

Viktigt!

Att skapa ett klustrat index med en FILLFACTOR mindre än 100 påverkar hur mycket lagringsutrymme datan upptar eftersom databasmotorn omfördelar datan när den skapar det klustrade indexet.

Mer information finns i Ange fyllningsfaktor för ett index.

SORT_IN_TEMPDB = { ON | AV }

Specificerar om man ska lagra tillfälliga sorteringsresultat i tempdb. Standardinställningen är AV.

ON
De mellanliggande sorteringsresultaten som används för att bygga indexet lagras i tempdb. Detta kan minska tiden det tar att skapa ett index om tempdb finns på en annan uppsättning diskar än användardatabasen. Detta ökar dock mängden diskutrymme som används under indexversionen.

AV
Mellanliggande sorteringsresultat lagras i samma databas som indexet.

Utöver det utrymme som krävs i användardatabasen för att skapa indexet måste tempdb ha ungefär lika mycket extra utrymme för att hålla de mellanliggande sorteringsresultaten. För mer information, se SORT_IN_TEMPDB Alternativ för index.

IGNORE_DUP_KEY = AV

Har ingen effekt för XML-index eftersom indextypen aldrig är unik. Sätt inte detta alternativ till PÅ, annars visas ett fel.

DROP_EXISTING = { ON | AV }

Specificerar att det namngivna, redan existerande XML-indexet tas bort och byggs upp igen. Standardinställningen är AV.

ON
Det befintliga indexet tas bort och återskapas. Det angivna indexnamnet måste vara samma som ett befintligt index. Indexdefinitionen kan dock ändras. Du kan till exempel ange olika kolumner, sorteringsordning, partitionsschema eller indexalternativ.

AV
Ett fel visas om det angivna indexnamnet redan finns.

Indextypen kan inte ändras med hjälp av DROP_EXISTING. Dessutom kan ett primärt XML-index inte omdefinieras som ett sekundärt XML-index, eller tvärtom.

ONLINE = AV

Anger att underliggande tabeller och associerade index inte är tillgängliga för frågor och dataändringar under indexåtgärden. I denna version av SQL Server stöds inte online-indexbyggen för XML-index. Om detta alternativ är inställt på ON för ett XML-index visas ett fel. Antingen utelämnar du alternativet ONLINE eller ställer ONLINE till AVSTÄNGT.

En offline-indexoperation som skapar, bygger om eller släpper ett XML-index får ett Schema Modification (Sch-M) lås på tabellen. Detta förhindrar all användaråtkomst till den underliggande tabellen under operationen.

Anmärkning

Onlineindexåtgärder är inte tillgängliga i varje utgåva av Microsoft SQL Server. En lista över funktioner som stöds av versionerna av SQL Server finns i Utgåvor och funktioner som stöds i SQL Server 2022.

ALLOW_ROW_LOCKS = { ON | AV }

Anger om radlås tillåts. Standardinställningen är PÅ.

ON
Radlås tillåts vid åtkomst till indexet. Databasmotorn avgör när radlås används.

AV
Radlås används inte.

ALLOW_PAGE_LOCKS = { ON | AV }

Anger huruvida sidlås är tillåtna. Standardinställningen är PÅ.

ON
Sidlås tillåts vid åtkomst till indexet. Databasmotorn avgör när sidlås används.

AV
Sidlås används inte.

MAXDOP = max_degree_of_parallelism

Åsidosätter konfigurationsalternativet Konfigurera maximal grad av parallellism Serverkonfigurationsalternativet under indexoperationen. Använd MAXDOP för att begränsa antalet processorer som används i en parallell plankörning. Maximalt är 64 processorer.

Viktigt!

Även om MAXDOP-alternativet syntaktiskt stöds för alla XML-index, använder CREATE XML INDEX för ett primärt XML-index endast en enda processor.

max_degree_of_parallelism kan vara:

1
Undertrycker parallell plangenerering.

>1
Begränsar det maximala antalet processorer som används i en parallell indexå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.

Mer information finns i Konfigurera parallella indexåtgärder.

Anmärkning

Parallella indexåtgärder är inte tillgängliga i varje utgåva av Microsoft SQL Server. En lista över funktioner som stöds av versionerna av SQL Server finns i Utgåvor och funktioner som stöds i SQL Server 2022.

Anmärkningar

Beräknade kolumner härledda från xml-datatyper kan indexeras antingen som en nyckelkolumn eller inkluderad icke-nyckelkolumn så länge den beräknade kolumndatatypen är tillåten som en indexnyckelkolumn eller icke-nyckelkolumn. Du kan inte skapa ett primärt XML-index på en beräknad XML-kolumn .

För att se information om XML-index, använd katalogvyn sys.xml_indexes .

För mer information om XML-index, se XML-index (SQL Server).

XML-komprimering

gäller för: SQL Server 2022 (16.x) och senare versioner, Azure SQL Database och Azure SQL Managed Instance.

  • XML-index ärver inte komprimeringsegenskapen för tabellen. Om du vill komprimera index måste du uttryckligen aktivera XML-komprimering på XML-index.
  • Sekundära XML-index ärver inte komprimeringsegenskapen från det primära XML-indexet.
  • Som standard är XML-komprimeringsinställningen för XML-index inställd på AV när indexet skapas.

Ytterligare anmärkningar om indexskapandet

För mer information om indexskapande, se avsnittet "Anmärkningar" i SKAPA INDEX (Transact-SQL).

Examples

Kodexemplen i den här artikeln använder AdventureWorks2025- eller AdventureWorksDW2025-exempeldatabasen, som du kan ladda ned från startsidan Microsoft SQL Server Samples och Community Projects.

A. Skapa ett primärt XML-index

Följande exempel skapar ett primärt XML-index på kolumnen CatalogDescription i Production.ProductModel tabellen.

IF EXISTS (SELECT * FROM sys.indexes
            WHERE name = N'PXML_ProductModel_CatalogDescription')
    DROP INDEX PXML_ProductModel_CatalogDescription
        ON Production.ProductModel;  
GO  
CREATE PRIMARY XML INDEX PXML_ProductModel_CatalogDescription
    ON Production.ProductModel (CatalogDescription);  
GO

B. Skapa ett primärt XML-index med XML-komprimering

gäller för: SQL Server 2022 (16.x) och senare versioner, Azure SQL Database och Azure SQL Managed Instance.

Följande exempel skapar ett primärt XML-index på kolumnen CatalogDescription i Production.ProductModel tabellen.

IF EXISTS (SELECT * FROM sys.indexes
            WHERE name = N'PXML_ProductModel_CatalogDescription')
    DROP INDEX PXML_ProductModel_CatalogDescription
        ON Production.ProductModel;  
GO  
CREATE PRIMARY XML INDEX PXML_ProductModel_CatalogDescription
    ON Production.ProductModel (CatalogDescription)
    WITH (XML_COMPRESSION = ON);  
GO

C. Skapa ett sekundärt XML-index

Följande exempel skapar ett sekundärt XML-index på kolumnen CatalogDescription i Production.ProductModel tabellen.

IF EXISTS (SELECT name FROM sys.indexes
            WHERE name = N'IXML_ProductModel_CatalogDescription_Path')
    DROP INDEX IXML_ProductModel_CatalogDescription_Path
        ON Production.ProductModel;  
GO  
CREATE XML INDEX IXML_ProductModel_CatalogDescription_Path
    ON Production.ProductModel (CatalogDescription)
    USING XML INDEX PXML_ProductModel_CatalogDescription FOR PATH ;
GO

D. Skapa ett sekundärt XML-index med XML-komprimering

gäller för: SQL Server 2022 (16.x) och senare versioner, Azure SQL Database och Azure SQL Managed Instance.

Följande exempel skapar ett sekundärt XML-index på kolumnen CatalogDescription i Production.ProductModel tabellen.

IF EXISTS (SELECT name FROM sys.indexes
            WHERE name = N'IXML_ProductModel_CatalogDescription_Path')
    DROP INDEX IXML_ProductModel_CatalogDescription_Path
        ON Production.ProductModel;  
GO  
CREATE XML INDEX IXML_ProductModel_CatalogDescription_Path
    ON Production.ProductModel (CatalogDescription)
    USING XML INDEX PXML_ProductModel_CatalogDescription FOR PATH
    WITH (XML_COMPRESSION = ON);
GO

Se även