Delen via


MAAK XML-INDEX AAN (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Maakt een XML-index aan op een gespecificeerde tabel. Een index kan worden aangemaakt voordat er data in de tabel is. XML-indexen kunnen worden aangemaakt op tabellen in een andere database door een gekwalificeerde databasenaam op te geven.

Opmerking

Om een relationele index te maken, zie CREATE INDEX (Transact-SQL). Voor informatie over hoe je een ruimtelijke index maakt, zie CREATE SPATIAL INDEX (Transact-SQL).

Transact-SQL syntaxis-conventies

Syntaxis

--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

[PRIMAIR] XML

Maakt een XML-index aan op de opgegeven xml-kolom . Wanneer PRIMARY wordt gespecificeerd, wordt een geclusterde index aangemaakt met de geclusterde sleutel gevormd uit de clusteringsleutel van de gebruikerstabel en een XML-knoopidentificator. Elke tabel kan tot 249 XML-indexen bevatten. Let op het volgende wanneer je een XML-index maakt:

  • Er moet een geclusterde index bestaan op de primaire sleutel van de gebruikerstabel.

  • De clusteringsleutel van de gebruikerstabel is beperkt tot 15 kolommen.

  • Elke xml-kolom in een tabel kan één primaire XML-index en meerdere secundaire XML-indexen hebben.

  • Er moet een primaire XML-index op een xml-kolom bestaan voordat een secundaire XML-index op de kolom kan worden aangemaakt.

  • Een XML-index kan slechts worden aangemaakt op één enkele xml-kolom . Je kunt geen XML-index maken op een niet-xml-kolom , noch een relationele index op een xml-kolom .

  • Je kunt geen XML-index maken, primair of secundair, op een xml-kolom in een view, op een tabelwaardige variabele met xml-kolommen , of xml-type variabelen.

  • Je kunt geen primaire XML-index maken op een berekende xml-kolom .

  • De instellingen voor de SET-optie moeten hetzelfde zijn als die vereist zijn voor geïndexeerde weergaven en berekende kolomindexen. Specifiek moet de optie ARITHABORT op AAN worden gezet wanneer een XML-index wordt aangemaakt en bij het invoegen, verwijderen of bijwerken van waarden in de xml-kolom .

Zie XML-indexen (SQL Server)voor meer informatie.

index_name

De naam van de index. Indexnamen moeten uniek zijn binnen een tabel, maar hoeven niet uniek te zijn binnen een database. Indexnamen moeten de regels van id's volgen.

Primaire XML-indexnamen kunnen niet beginnen met de volgende tekens: #, ##, @, of @@.

xml_column_name

De xml-kolom waarop de index is gebaseerd. Slechts één xml-kolom kan worden gespecificeerd in één XML-indexdefinitie; echter, meerdere secundaire XML-indexen kunnen worden aangemaakt op een XML-kolom .

GEBRUIK VAN XML INDEX xml_index_name

Specificeert de primaire XML-index die gebruikt moet worden bij het creëren van een secundaire XML-index.

VOOR { WAARDE | PAD | EIGENSCHAP }

Specificeert het type secundaire XML-index.

VALUE
Maakt een secundaire XML-index aan op kolommen waar sleutelkolommen (knoopwaarde en pad) van de primaire XML-index zijn.

PAD
Maakt een secundaire XML-index aan op kolommen die zijn gebouwd op padwaarden en knoopwaarden in de primaire XML-index. In de secundaire index van PATH zijn de pad- en knoopwaarden sleutelkolommen die efficiënte zoekacties mogelijk maken bij het zoeken naar paden.

EIGENSCHAP
Maakt een secundaire XML-index aan op kolommen (PK, pad en knoopwaarde) van de primaire XML-index waarbij PK de primaire sleutel van de basistabel is.

<object>::=

Het volledig gekwalificeerde of niet-gekwalificeerde object dat moet worden geïndexeerd.

database_name
De naam van de database.

schema_name
De naam van het schema waartoe de tabel behoort.

table_name
De naam van de tabel die moet worden geïndexeerd.

<xml_index_option> ::=

Hiermee geeft u de opties op die moeten worden gebruikt bij het maken van de index.

PAD_INDEX = { ON | UIT }

Hiermee geeft u indexopvulling. De standaard is UIT.

ON
Het percentage vrije ruimte dat door fillfactor wordt gespecificeerd, wordt toegepast op de intermediaire pagina's van de index.

OFF of fillfactor is niet gespecificeerd
De pagina's op tussenliggend niveau zijn gevuld met bijna-capaciteit, waardoor er voldoende ruimte is voor ten minste één rij met de maximale grootte van de index, rekening houdend met de set sleutels op de tussenliggende pagina's.

De PAD_INDEX-optie is alleen nuttig wanneer FILLFACTOR is opgegeven, omdat PAD_INDEX het percentage gebruikt dat door FILLFACTOR is gespecificeerd. Als het percentage dat voor FILLFACTOR is gespecificeerd niet groot genoeg is om één rij toe te staan, overschrijft de Database Engine intern het percentage om het minimum toe te staan. Het aantal rijen op een tussenliggende indexpagina is nooit minder dan twee, ongeacht hoe laag de waarde van de fillfactor is.

FILLFACTOR = fillfactor

Hiermee geeft u een percentage op dat aangeeft hoe vol de database-engine het bladniveau van elke indexpagina moet maken tijdens het maken of opnieuw opbouwen van de index. Fillfactor moet een geheel getal zijn van 1 tot 100. De standaardwaarde is 0. Als fillfactor 100 of 0 is, maakt de Database Engine indexen met bladpagina's tot op de volle capaciteit gevuld.

Opmerking

Vulfactorwaarden 0 en 100 zijn in alle opzichten hetzelfde.

De FILLFACTOR-instelling geldt alleen wanneer de index wordt aangemaakt of opnieuw opgebouwd. De database-engine behoudt niet dynamisch het opgegeven percentage lege ruimte op de pagina's. Als u de instelling voor de vulfactor wilt weergeven, gebruikt u de catalogusweergave sys.indexes .

Belangrijk

Het aanmaken van een geclusterde index met een FILLFACTOR kleiner dan 100 beïnvloedt de hoeveelheid opslagruimte die de data inneemt, omdat de Database Engine de data herverdeelt wanneer deze de geclusterde index aanmaakt.

Voor meer informatie, zie Specificeer de vulfactor voor een index.

SORT_IN_TEMPDB = { ON | UIT }

Specificeert of tijdelijke sorteerresultaten in tempdb moeten worden opgeslagen. De standaard is UIT.

ON
De tussentijdse sorteerresultaten die worden gebruikt om de index te bouwen, worden opgeslagen in tempdb. Dit kan de tijd die nodig is om een index te maken verkorten als tempdb op een andere set schijven staat dan de gebruikersdatabase. Dit verhoogt echter de hoeveelheid schijfruimte die wordt gebruikt tijdens de indexbuild.

OFF
De tussenliggende sorteerresultaten worden opgeslagen in dezelfde database als de index.

Naast de benodigde ruimte in de gebruikersdatabase om de index te maken, moet tempdb ongeveer evenveel extra ruimte hebben om de tussentijdse sorteerresultaten op te slaan. Voor meer informatie, zie SORT_IN_TEMPDB Optie Voor Indexen.

IGNORE_DUP_KEY = UIT

Heeft geen effect op XML-indexen omdat het indextype nooit uniek is. Zet deze optie niet op AAN, anders wordt er een foutmelding gegeven.

DROP_EXISTING = { ON | UIT }

Geeft aan dat de benoemde, bestaande XML-index wordt verwijderd en opnieuw opgebouwd. De standaard is UIT.

ON
De bestaande index wordt verwijderd en opnieuw opgebouwd. De opgegeven indexnaam moet hetzelfde zijn als een bestaande index; De indexdefinitie kan echter worden gewijzigd. U kunt bijvoorbeeld verschillende kolommen, sorteervolgorde, partitieschema of indexopties opgeven.

OFF
Er wordt een fout weergegeven als de opgegeven indexnaam al bestaat.

Het indextype kan niet worden gewijzigd met behulp van DROP_EXISTING. Ook kan een primaire XML-index niet worden hergedefinieerd als een secundaire XML-index, of andersom.

ONLINE = UIT

Hiermee geeft u op dat onderliggende tabellen en bijbehorende indexen niet beschikbaar zijn voor query's en gegevenswijziging tijdens de indexbewerking. In deze versie van SQL Server worden online indexbouw niet ondersteund voor XML-indexen. Als deze optie op AAN staat voor een XML-index, wordt er een foutmelding geactiveerd. Of je laat de ONLINE optie weg of zet ONLINE op UIT.

Een offline indexoperatie die een XML-index aanmaakt, herbouwt of verwijdert, verkrijgt een Schema Modification (Sch-M) lock op de tabel. Dit voorkomt alle gebruikerstoegang tot de onderliggende tabel tijdens de bewerking.

Opmerking

Online indexbewerkingen zijn niet beschikbaar in elke editie van Microsoft SQL Server. Zie -edities en ondersteunde functies van SQL Server 2022voor een lijst met functies die worden ondersteund door de edities van SQL Server.

ALLOW_ROW_LOCKS = { AAN | UIT }

Hiermee geeft u op of rijvergrendelingen zijn toegestaan. De standaard is AAN.

ON
Rijvergrendelingen zijn toegestaan bij toegang tot de index. De database-engine bepaalt wanneer rijvergrendelingen worden gebruikt.

OFF
Rijvergrendelingen worden niet gebruikt.

ALLOW_PAGE_LOCKS = { AAN | UIT }

Hiermee geeft u op of paginavergrendelingen zijn toegestaan. De standaard is AAN.

ON
Paginavergrendelingen zijn toegestaan bij toegang tot de index. De database-engine bepaalt wanneer paginavergrendelingen worden gebruikt.

OFF
Paginavergrendelingen worden niet gebruikt.

MAXDOP = max_degree_of_parallelism

Overschrijft de configuratieoptie Configureer de maximale mate van parallelisme Server Configuration Option tijdens de indexoperatie. Gebruik MAXDOP om het aantal processors dat wordt gebruikt in een parallelle uitvoering van een plan te beperken. Het maximum is 64 processoren.

Belangrijk

Hoewel de MAXDOP-optie syntactisch wordt ondersteund voor alle XML-indexen, gebruikt CREATE XML INDEX voor een primaire XML-index slechts één processor.

max_degree_of_parallelism kan het volgende zijn:

1
Onderdrukt het genereren van parallelle plannen.

>1
Hiermee beperkt u het maximum aantal processors dat in een parallelle indexbewerking wordt gebruikt tot het opgegeven aantal of minder op basis van de huidige systeemworkload.

0 (standaard)
Gebruikt het werkelijke aantal processors of minder op basis van de huidige systeemworkload.

Zie Parallelle indexbewerkingen configurerenvoor meer informatie.

Opmerking

Parallelle indexbewerkingen zijn niet beschikbaar in elke editie van Microsoft SQL Server. Zie -edities en ondersteunde functies van SQL Server 2022voor een lijst met functies die worden ondersteund door de edities van SQL Server.

Opmerkingen

Berekende kolommen afgeleid van xml-datatypes kunnen worden geïndexeerd als een sleutel of als een opgenomen niet-sleutelkolom, zolang het berekende kolomdatatype is toegestaan als indexsleutelkolom of niet-sleutelkolom. Je kunt geen primaire XML-index maken op een berekende xml-kolom .

Om informatie over XML-indexen te bekijken, gebruik de catalogusweergave sys.xml_indexes .

Voor meer informatie over XML-indexen, zie XML Indexes (SQL Server).

XML-compressie

van toepassing op: SQL Server 2022 (16.x) en latere versies, Azure SQL Database en Azure SQL Managed Instance.

  • XML-indexen nemen de compressie-eigenschap van de tabel niet over. Als u indexen wilt comprimeren, moet u XML-compressie expliciet inschakelen voor XML-indexen.
  • Secundaire XML-indexen erven niet de compressie-eigenschap van de primaire XML-index.
  • Standaard is de instelling voor XML-compressie voor XML-indexen ingesteld op UIT wanneer de index wordt gemaakt.

Aanvullende opmerkingen over het aanmaken van een index

Voor meer informatie over het aanmaken van indexen, zie de sectie "Opmerkingen" in INDEX MAKEN (Transact-SQL).

Voorbeelden

De codevoorbeelden in dit artikel gebruiken de AdventureWorks2025 of AdventureWorksDW2025 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .

Eén. Het creëren van een primaire XML-index

Het volgende voorbeeld creëert een primaire XML-index op de CatalogDescription kolom in de Production.ProductModel tabel.

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. Een primaire XML-index creëren met XML-compressie

van toepassing op: SQL Server 2022 (16.x) en latere versies, Azure SQL Database en Azure SQL Managed Instance.

Het volgende voorbeeld creëert een primaire XML-index op de CatalogDescription kolom in de Production.ProductModel tabel.

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. Het creëren van een secundaire XML-index

Het volgende voorbeeld creëert een secundaire XML-index op de CatalogDescription kolom in de Production.ProductModel tabel.

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. Een secundaire XML-index creëren met XML-compressie

van toepassing op: SQL Server 2022 (16.x) en latere versies, Azure SQL Database en Azure SQL Managed Instance.

Het volgende voorbeeld creëert een secundaire XML-index op de CatalogDescription kolom in de Production.ProductModel tabel.

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

Zie ook