Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Selectieve XML-indexen zijn een ander type XML-index dat voor u beschikbaar is, naast gewone XML-indexen. De doelstellingen van de functie selectieve XML-index zijn:
Om de prestaties van query's te verbeteren ten opzichte van XML-gegevens die zijn opgeslagen in SQL Server.
Ter ondersteuning van snellere indexering van grote XML-gegevensworkloads.
Om de schaalbaarheid te verbeteren door de opslagkosten van XML-indexen te verlagen.
De belangrijkste beperking van gewone XML-indexen is dat ze het hele XML-document indexeren. Dit leidt tot verschillende belangrijke nadelen, zoals verminderde queryprestaties en hogere onderhoudskosten voor indexen, voornamelijk gerelateerd aan de opslagkosten van de index.
Met de functie selectieve XML-index kunt u alleen bepaalde paden van de XML-documenten naar index promoveren. Tijdens het maken van de index worden deze paden geëvalueerd en worden de knooppunten waarnaar ze verwijzen, versnipperd en opgeslagen in een relationele tabel in SQL Server. Deze functie maakt gebruik van een efficiënt toewijzingsalgoritmen dat is ontwikkeld door Microsoft Research in samenwerking met het SQL Server-productteam. Met dit algoritme worden de XML-knooppunten toegewezen aan één relationele tabel en worden uitzonderlijke prestaties bereikt, terwijl er slechts beperkte opslagruimte nodig is.
De functie selectieve XML-index ondersteunt ook secundaire selectieve XML-indexen via knooppunten die zijn geïndexeerd door een selectieve XML-index. Deze secundaire selectieve indexen zijn efficiënt en verbeteren de prestaties van query's verder.
Voordelen van selectieve XML-indexen
Selectieve XML-indexen bieden de volgende voordelen:
Aanzienlijk verbeterde queryprestaties ten opzichte van het XML-gegevenstype voor typische querybelastingen.
Lagere opslagvereisten vergeleken met gewone XML-indexen.
Lagere onderhoudskosten voor indexen in vergelijking met gewone XML-indexen.
U hoeft toepassingen niet bij te werken om te profiteren van selectieve XML-indexen.
Selectieve XML-indexen en primaire XML-indexen
Belangrijk
Maak een selectieve XML-index in plaats van een gewone XML-index in de meeste gevallen voor betere prestaties en efficiëntere opslag.
Een selectieve XML-index wordt echter niet aanbevolen wanneer aan een van de volgende voorwaarden wordt voldaan:
U wijst een groot aantal knooppuntpaden toe.
U ondersteunt query's voor onbekende elementen of elementen op een onbekende locatie in de documentstructuur.
Voorbeeld van een selectieve XML-index
Bekijk het volgende XML-fragment als een XML-document in een tabel van ongeveer 500.000 rijen:
<book>
<created>2004-03-01</created>
<authors>Various</authors>
<subjects>
<subject>English wit and humor -- Periodicals</subject>
<subject>AP</subject>
</subjects>
<title>Punch, or the London Charivari, Volume 156, April 2, 1919</title>
<id>etext11617</id>
</book>
Het maken van een primaire XML-index over zoveel rijen van dit eenvoudige schema duurt lang. Het uitvoeren van query's op deze gegevens heeft ook te maken met het feit dat een primaire XML-index geen ondersteuning biedt voor selectief indexeren.
Als u deze gegevens alleen via het /book/title pad en het /book/subjects pad hoeft op te vragen, kunt u de volgende selectieve XML-index maken:
CREATE SELECTIVE XML INDEX SXI_index
ON Tbl(xmlcol)
FOR
(
pathTitle = '/book/title/text()' AS XQUERY 'xs:string',
pathAuthors = '/book/authors' AS XQUERY 'node()',
pathId = '/book/id' AS SQL NVARCHAR(100)
);
De voorgaande instructie is een goed voorbeeld van de CREATE-syntaxis die u gebruikt wanneer u een selectieve XML-index maakt. In de INSTRUCTIE CREATE geeft u eerst een naam op voor de index en identificeert u de tabel en de XML-kolom die u wilt indexeren. Vervolgens geeft u de paden op die u wilt indexeren. Een pad heeft drie delen:
Een naam die het pad uniek identificeert.
Een XQuery-expressie die het pad beschrijft.
Optionele optimalisatiehints.
Zie Verwante taken voor meer informatie over deze elementen.
Ondersteunde functies, vereisten en beperkingen
Ondersteunde XML-functies
Selectieve XML-indexen ondersteunen de XQuery die wordt ondersteund door SQL Server in de exist(), value()en nodes() methoden.
Voor de
exist()envalue()nodes()methoden bevatten selectieve XML-indexen voldoende informatie om de volledige expressie te transformeren.Voor de
query()enmodify()methoden kunnen selectieve XML-indexen alleen worden gebruikt voor het filteren van knooppunten.Voor de
query()methode worden selectieve XML-indexen niet gebruikt om resultaten op te halen.Voor de
modify()methode worden selectieve XML-indexen niet gebruikt om XML-documenten bij te werken.
Niet-ondersteunde XML-functies
Selectieve XML-indexen bieden geen ondersteuning voor de volgende functies die worden ondersteund in de SQL Server-implementatie van XML:
Indexering van knooppunten met complexe XS-typen: samenvoegtypen, reekstypen en lijsttypen.
Indexering van knooppunten met binaire XS-typen: bijvoorbeeld base64Binary en hexBinary.
De knooppunten opgeven die moeten worden geïndexeert met XPath-expressies die het jokerteken
*aan het einde bevatten: bijvoorbeeld/a/b/c/*,/a//b/*of/a/b/*:c.Indexering van een andere as dan kind, attribuut of afstammeling. De
//<step>zaak is toegestaan als een speciaal geval.Indexering van XML-verwerkingsinstructies en opmerkingen.
De id voor een knooppunt opgeven en ophalen met behulp van de functie id().
Vereiste voorwaarden
De volgende vereisten moeten bestaan voordat u een selectieve XML-index kunt maken via een XML-kolom in een gebruikerstabel:
Er moet een geclusterde index bestaan op de primaire sleutel van de gebruikerstabel.
De primaire sleutel van de gebruikerstabel is beperkt tot een grootte van 128 bytes bij gebruik met selectieve XML-indexen.
De clustersleutel van de gebruikerstabel is beperkt tot 15 kolommen bij gebruik met selectieve XML-indexen.
Beperkingen
Algemene vereisten en beperkingen
- Elke selectieve XML-index kan alleen worden gemaakt in één XML-kolom
- U kunt geen selectieve XML-index maken voor een niet-XML-kolom
- Elke XML-kolom in een tabel kan slechts één selectieve XML-index hebben
- Elke tabel kan maximaal 249 selectieve XML-indexen bevatten.
Beperkingen voor ondersteunde objecten
U kunt geen selectieve XML-indexen maken voor de volgende objecten:
- XML-kolommen in een weergave
- Tabelwaardevariabele met XML-kolommen
- XML-typevariabelen
- Berekende XML-kolommen
- XML-kolommen met een diepte van meer dan 128 geneste knooppunten.
Opslagbeperkingen
Er is een eindige limiet voor het aantal knooppunten uit het XML-document dat kan worden toegevoegd aan de index. Een selectieve XML-index wijst XML-documenten toe aan één relationele tabel. Daarom mogen er niet meer dan 1024 niet-null-kolommen in een willekeurige rij van de tabel zijn. Bovendien zijn veel van de beperkingen van sparsekolommen ook van toepassing op selectieve XML-indexen, omdat de indexen sparsekolommen gebruiken voor opslag.
Het maximum aantal niet-null-kolommen dat in een bepaalde rij wordt ondersteund, is afhankelijk van de grootte van de gegevens in de kolommen:
In het beste geval worden 1024 niet-null-kolommen ondersteund wanneer alle kolommen van het type bit zijn.
In het ergste geval worden slechts 236 niet-null-kolommen ondersteund wanneer alle kolommen grote objecten van het type varchar zijn.
Selectieve XML-indexen gebruiken intern van één tot vier kolommen voor elk knooppuntpad dat wordt geïndexeerd. Het totale aantal knooppunten dat kan worden geïndexeerd, varieert van 60 tot enkele honderden knooppunten, afhankelijk van de werkelijke grootte van de gegevens in de geïndexeerde paden.
In het ergste geval, wanneer sommige of alle knooppunten met behulp van
//worden toegewezen in de definitie van het knooppuntpad, is het maximum aantal geïndexeerde knooppunten 60.In het beste geval, wanneer knooppunten worden toegewezen zonder gebruik te maken van
//in de definitie van het knooppuntpad, is het maximum aantal geïndexeerde knooppunten 200.
Selectieve XML-indexen worden opnieuw opgebouwd wanneer u de index maakt of wijzigt
Wanneer u een selectieve XML-index maakt of wijzigt, wordt deze opnieuw opgebouwd in een offlinemodus met één thread. Vaak hebben ALTER-instructies een negatieve invloed op de prestaties van query's via de geïndexeerde XML-documenten.
Andere beperkingen
Selectieve XML-indexen worden niet ondersteund in queryhints.
Selectieve XML-indexen en secundaire selectieve XML-indexen worden niet ondersteund in Database Tuning Advisor.