Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Selektivní indexy XML jsou dalším typem indexu XML, který je k dispozici kromě běžných indexů XML. Cíle funkce selektivního indexu XML jsou následující:
Zvýšení výkonu dotazů na data XML uložená na SQL Serveru
Pro zajištění rychlejšího indexování velkých datových úloh XML.
Pokud chcete zlepšit škálovatelnost snížením nákladů na úložiště indexů XML.
Hlavním omezením u běžných indexů XML je, že indexují celý dokument XML. To vede k několika významným nevýhodám, jako je snížení výkonu dotazů a vyšší náklady na údržbu indexu, většinou související s náklady na úložiště indexu.
Funkce selektivního indexu XML umožňuje zvýraznit pouze určité cesty z dokumentů XML k indexaci. Při vytváření indexu se tyto cesty vyhodnocují a uzly, na které odkazují, se přehrávají a ukládají v relační tabulce na SQL Serveru. Tato funkce používá efektivní algoritmus mapování vyvinutý společností Microsoft Research ve spolupráci s produktovým týmem SQL Serveru. Tento algoritmus mapuje uzly XML na jednu relační tabulku a dosahuje výjimečného výkonu a vyžaduje pouze skromný prostor úložiště.
Funkce selektivního indexu XML také podporuje sekundární selektivní indexy XML přes uzly, které byly indexovány selektivním indexem XML. Tyto sekundární selektivní indexy jsou efektivní a dále zlepšují výkon dotazů.
Výhody selektivních indexů XML
Selektivní indexy XML poskytují následující výhody:
Výrazně se zlepšil výkon dotazů u datového typu XML pro typické načítání dotazů.
Snížené požadavky na úložiště v porovnání s běžnými indexy XML.
Nižší náklady na údržbu indexů v porovnání s běžnými indexy XML.
Není nutné aktualizovat aplikace tak, aby využívaly selektivní indexy XML.
Selektivní indexy XML a primární indexy XML
Důležité
Ve většině případů vytvořte selektivní index XML místo běžného indexu XML pro lepší výkon a efektivnější úložiště.
Selektivní index XML se však nedoporučuje, pokud platí některé z následujících podmínek:
Mapujete velké množství cest uzlů.
Podporujete dotazy na neznámé prvky nebo prvky v neznámém umístění ve struktuře dokumentu.
Příklad selektivního indexu XML
Představte si následující fragment XML jako dokument XML v tabulce s přibližně 500 000 řádky:
<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>
Vytvoření primárního indexu XML přes tolik řádků tohoto jednoduchého schématu trvá dlouho. Dotazování na tato data také trpí skutečností, že primární index XML nepodporuje selektivní indexování.
Pokud potřebujete dotazovat pouze tato data přes /book/title cestu a /book/subjects cestu, můžete vytvořit následující selektivní index XML:
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)
);
Předchozí příkaz je dobrým příkladem syntaxe CREATE, kterou použijete při vytváření selektivního indexu XML. V příkazu CREATE nejprve zadáte název indexu a identifikujete tabulku a sloupec XML, který se má indexovat. Pak zadáte cesty k indexování. Cesta má tři části:
Název, který jednoznačně identifikuje cestu.
Výraz XQuery, který popisuje cestu.
Volitelné rady pro optimalizaci
Další informace o těchto prvcích najdete v Relativní úkoly.
Podporované funkce, požadavky a omezení
Podporované funkce XML
Selektivní indexy XML podporují XQuery podporované SQL Serverem uvnitř exist(), value() a nodes() metod.
Selektivní indexy XML pro metody
exist(),value()anodes()obsahují dostatek informací pro transformaci celého výrazu.Pro metody
query()amodify()metody lze selektivní indexy XML použít pouze pro filtrování uzlů.Pro metodu
query()se k načtení výsledků nepoužívají selektivní indexy XML.Pro metodu
modify()se k aktualizaci dokumentů XML nepoužívají selektivní indexy XML.
Nepodporované funkce XML
Selektivní indexy XML nepodporují následující funkce podporované při implementaci XML SQL Serveru:
Indexování uzlů se složitými typy XS: typy sjednocení, typy sekvencí a typy seznamů.
Indexování uzlů pomocí binárních typů XS: například base64Binary a hexBinary.
Určení uzlů pro indexování pomocí výrazů XPath, které obsahují zástupný znak
*na konci: Například/a/b/c/*, ,/a//b/*nebo/a/b/*:c.Indexování jakékoli osy jiné než podřízené, atributu nebo potomka. Případ
//<step>je povolený jako zvláštní případ.Indexování instrukcí a komentářů zpracování XML
Určení a načtení identifikátoru uzlu pomocí funkce ID()
Požadavky
Před vytvořením selektivního indexu XML ve sloupci XML v tabulce uživatele musí existovat následující požadavky:
Clusterovaný index musí existovat v primárním klíči tabulky uživatelů.
Primární klíč tabulky uživatelů je omezen na velikost 128 bajtů při použití se selektivními indexy XML.
Clusteringový klíč tabulky uživatelů je omezen na 15 sloupců při použití se selektivními indexy XML.
Omezení
Obecné požadavky a omezení
- Každý selektivní index XML lze vytvořit pouze v jednom sloupci XML.
- Ve sloupci bez XML nemůžete vytvořit selektivní index XML.
- Každý sloupec XML v tabulce může mít pouze jeden selektivní index XML.
- Každá tabulka může mít až 249 selektivních indexů XML.
Omezení podporovaných objektů
U následujících objektů nelze vytvořit selektivní indexy XML:
- Sloupce XML v zobrazení
- Proměnná s hodnotou tabulky se sloupci XML
- Proměnné typu XML
- Počítané sloupce XML
- Sloupce XML s hloubkou více než 128 vnořených uzlů
Omezení úložiště
Existuje konečný limit počtu uzlů z dokumentu XML, který lze přidat do indexu. Selektivní index XML mapuje dokumenty XML na jednu relační tabulku. Proto nemůže mít v daném řádku tabulky více než 1024 sloupců, které nejsou null. Řada omezení řídkých sloupců se navíc vztahuje také na selektivní indexy XML, protože indexy používají pro ukládání řídké sloupce.
Maximální počet nenulových sloupců podporovaných v libovolném řádku závisí na velikosti dat ve sloupcích.
V nejlepším případě se podporuje 1024 sloupců, které nejsou null, pokud jsou všechny sloupce typu bit.
V nejhorším případě jsou podporovány pouze 236 sloupců, které nejsou null, pokud jsou všechny sloupce velkými objekty typu varchar.
Selektivní indexy XML používají interně jeden až čtyři sloupce pro každou cestu uzlu, která je indexována. Celkový počet uzlů, které se dají indexovat, je od 60 do několika stovek uzlů v závislosti na skutečné velikosti dat v indexovaných cestách.
V nejhorším případě platí, že pokud se některé nebo všechny uzly mapují pomocí
//definice cesty uzlu, maximální počet indexovaných uzlů je 60.V nejlepším případě platí, že pokud jsou uzly mapovány bez použití
//v definici cesty uzlu, maximální počet indexovaných uzlů je 200.
Selektivní indexy XML se znovu sestaví, když vytvoříte nebo změníte index.
Při vytváření nebo změně selektivního indexu XML se index znovu sestaví jednovláknově v režimu offline. Často příkazy ALTER mají negativní vliv na výkon dotazů v indexovaných dokumentech XML.
Další omezení
Selektivní indexy XML nejsou podporované v nápovědě k dotazům.
Advisor pro ladění databáze nepodporuje selektivní indexy XML a sekundární selektivní indexy XML.