Not
Å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
SQL-databas i Microsoft Fabric
Selektiva XML-index är en annan typ av XML-index som är tillgängliga för dig utöver vanliga XML-index. Målen för funktionen selektivt XML-index är följande:
För att förbättra prestanda för frågor över XML-data som lagras i SQL Server.
Stöd för snabbare indexering av stora XML-dataarbetsbelastningar.
För att förbättra skalbarheten genom att minska lagringskostnaderna för XML-index.
Den största begränsningen med vanliga XML-index är att de indexerar hela XML-dokumentet. Detta leder till flera betydande nackdelar, till exempel minskade frågeprestanda och ökade kostnader för indexunderhåll, främst relaterade till lagringskostnaderna för indexet.
Med funktionen selektivt XML-index kan du bara höja upp vissa sökvägar från XML-dokumenten för indexering. När indexet skapas utvärderas dessa sökvägar och noderna som de pekar på strimlades och lagras i en relationstabell i SQL Server. Den här funktionen använder en effektiv mappningsalgoritm som utvecklats av Microsoft Research i samarbete med SQL Server-produktteamet. Den här algoritmen mappar XML-noderna till en enda relationstabell och uppnår exceptionella prestanda samtidigt som det bara krävs litet lagringsutrymme.
Funktionen selektiv XML-index stöder även sekundära selektiva XML-index över noder som har indexerats av ett selektivt XML-index. Dessa sekundära selektiva index är effektiva och förbättrar frågornas prestanda ytterligare.
Fördelar med selektiva XML-index
Selektiva XML-index ger följande fördelar:
Avsevärt förbättrad frågeprestanda jämfört med XML-datatypen för vanliga frågeinläsningar.
Minskade lagringskrav jämfört med vanliga XML-index.
Minskade kostnader för indexunderhåll jämfört med vanliga XML-index.
Du behöver inte uppdatera program för att dra nytta av selektiva XML-index.
Selektiva XML-index och primära XML-index
Viktigt!
Skapa ett selektivt XML-index i stället för ett vanligt XML-index i de flesta fall för bättre prestanda och effektivare lagring.
Ett selektivt XML-index rekommenderas dock inte när något av följande villkor är sant:
Du mappar ett stort antal nodstigar.
Du stöder frågor för okända element eller element på en okänd plats i dokumentstrukturen.
Exempel på ett selektivt XML-index
Överväg följande XML-fragment som ett XML-dokument i en tabell med cirka 500 000 rader:
<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>
Det tar lång tid att skapa ett primärt XML-index över så många rader i det här enkla schemat. Att köra frågor mot dessa data beror också på att ett primärt XML-index inte stöder selektiv indexering.
Om du bara behöver köra frågor mot dessa data över /book/title sökvägen och /book/subjects sökvägen kan du skapa följande selektiva XML-index:
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)
);
Föregående instruktion är ett bra exempel på DEN CREATE-syntax som du använder när du skapar ett selektivt XML-index. I CREATE-instruktionen anger du först ett namn för indexet och identifierar tabellen och XML-kolumnen som ska indexeras. Sedan anger du sökvägarna för indexering. En sökväg har tre delar:
Ett namn som unikt identifierar sökvägen.
Ett XQuery-uttryck som beskriver sökvägen.
Valfria optimeringsindikationer.
Mer information om dessa element finns i Relaterade uppgifter.
Funktioner, krav och begränsningar som stöds
XML-funktioner som stöds
Selektiva XML-index stöder XQuery som stöds av SQL Server i exist()metoderna , value()och nodes() .
exist()För metoderna ,value()ochnodes()innehåller selektiva XML-index tillräckligt med information för att transformera hela uttrycket.query()För metoderna ochmodify()kan selektiva XML-index endast användas för nodfiltrering.query()För metoden används inte selektiva XML-index för att hämta resultat.modify()För metoden används inte selektiva XML-index för att uppdatera XML-dokument.
XML-funktioner som inte stöds
Selektiva XML-index stöder inte följande funktioner som stöds i SQL Server-implementeringen av XML:
Indexering av noder med komplexa XS-typer: uniontyper, sekvenstyper och listtyper.
Indexering av noder med binära XS-typer: till exempel base64Binary och hexBinary.
Ange de noder som ska indexeras med XPath-uttryck som innehåller jokertecknet
*i slutet: till exempel/a/b/c/*,/a//b/*eller/a/b/*:c.Indexera en annan axel än barn, attribut eller ättling. Ärendet
//<step>tillåts som ett specialfall.Indexering av INSTRUKTIONER och kommentarer för XML-bearbetning.
Ange och hämta identifieraren för en nod med hjälp av funktionen id().
Förutsättningar
Följande krav måste finnas innan du kan skapa ett selektivt XML-index över en XML-kolumn i en användartabell:
Ett klustrat index måste finnas på den primära nyckeln i användartabellen.
Den primära nyckeln i användartabellen är begränsad till en storlek på 128 byte när den används med selektiva XML-index.
Klustringsnyckeln i användartabellen är begränsad till 15 kolumner när den används med selektiva XML-index.
Begränsningar
Allmänna krav och begränsningar
- Varje selektivt XML-index kan bara skapas i en enda XML-kolumn
- Du kan inte skapa ett selektivt XML-index i en icke-XML-kolumn
- Varje XML-kolumn i en tabell kan bara ha ett selektivt XML-index
- Varje tabell kan ha upp till 249 selektiva XML-index.
Begränsningar för objekt som stöds
Du kan inte skapa selektiva XML-index för följande objekt:
- XML-kolumner i en vy
- Tabellvärdesvariabel med XML-kolumner
- XML-typvariabler
- Beräknade XML-kolumner
- XML-kolumner med ett djup på mer än 128 kapslade noder.
Lagringsbegränsningar
Det finns en begränsad gräns för antalet noder från XML-dokumentet som kan läggas till i indexet. Ett selektivt XML-index mappar XML-dokument till en enda relationstabell. Därför kan den inte ha fler än 1 024 icke-null-kolumner i en viss rad i tabellen. Dessutom gäller många av begränsningarna för glesa kolumner även för selektiva XML-index, eftersom indexen använder glesa kolumner för lagring.
Det maximala antalet icke-null-kolumner som stöds i en viss rad beror på storleken på data i kolumnerna:
I bästa fall stöds 1 024 icke-null-kolumner när alla kolumner är av typen bit.
I värsta fall stöds endast 236 icke-null-kolumner när alla kolumner är stora objekt av typen varchar.
Selektiva XML-index använder från en till fyra kolumner internt för varje nodsökväg som indexeras. Det totala antalet noder som kan indexeras sträcker sig från 60 till flera hundra noder, beroende på den faktiska storleken på data i de indexerade sökvägarna.
I värsta fall är det maximala antalet indexerade noder 60 när vissa eller alla noder mappas med
//i nodsökvägsdefinitionen.I bästa fall är det maximala antalet indexerade noder 200 när noder mappas utan att använda
//i nodsökvägsdefinitionen.
Selektiva XML-index återskapas när du skapar eller ändrar indexet
När du skapar eller ändrar ett selektivt XML-index återskapas det i ett enkelt trådat offlineläge. Alter-instruktioner påverkar ofta prestandan för frågor i de indexerade XML-dokumenten negativt.
Andra begränsningar
Selektiva XML-index stöds inte i frågetips.
Selektiva XML-index och sekundära selektiva XML-index stöds inte i Database Tuning Advisor.