Sdílet prostřednictvím


VYTVOŘIT XML INDEX (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Vytváří XML index na zadanou tabulku. Index lze vytvořit dříve, než jsou data v tabulce. XML indexy lze vytvářet na tabulkách v jiné databázi zadáním kvalifikovaného názvu databáze.

Poznámka:

Pro vytvoření relačního indexu viz VYTVOŘIT INDEX (Transact-SQL). Pro informace o tom, jak vytvořit prostorový index, viz VYTVOŘIT PROSTOROVÝ INDEX (Transact-SQL).

Transact-SQL konvence syntaxe

Syntaxe

--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ÁRKA] XML

Vytváří XML index na specifikovaném sloupci xml . Když je specifikován PRIMÁRNÍ, vytvoří se shlukovaný index s klíčem vytvořeným z klíče uživatele a identifikátoru XML uzlu. Každá tabulka může mít až 249 XML indexů. Při vytváření XML indexu si všimněte následujícího:

  • Clusterovaný index musí existovat v primárním klíči tabulky uživatelů.

  • Klíč pro shlukování uživatelské tabulky je omezen na 15 sloupců.

  • Každý sloupec xml v tabulce může mít jeden primární XML index a více sekundárních XML indexů.

  • Primární XML index musí existovat ve sloupci xml , než lze na sloupec vytvořit sekundární XML index.

  • XML index lze vytvořit pouze na jednom sloupci xml . Nemůžete vytvořit XML index na ne-xml sloupci, ani relační index na XML sloupci.

  • Nemůžete vytvořit XML index, primární ani sekundární, na sloupci XML v pohledu, na proměnné s hodnotou tabulky s XML sloupci nebo typovými proměnnými v xml .

  • Nemůžete vytvořit primární XML index na vypočítaném XML sloupci.

  • Nastavení volby SET musí být stejná jako u indexovaných zobrazení a vypočtených sloupcových indexů. Konkrétně musí být volba ARITHABORT nastavena na ON při vytváření XML indexu a při vkládání, mazání nebo aktualizaci hodnot ve sloupci xml .

Další informace naleznete v tématu Indexy XML (SQL Server).

index_name

Název indexu. Názvy indexů musí být v tabulce jedinečné, ale nemusí být jedinečné v rámci databáze. Názvy indexů musí dodržovat pravidla identifikátorů .

Primární XML indexová jména nesmí začínat následujícími znaky: #, ##, @, nebo @@.

xml_column_name

Sloupec xml , na kterém je index založen. V jedné definici XML indexu lze specifikovat pouze jeden sloupec xml ; nicméně na jednom sloupci XML lze vytvořit více sekundárních XML indexů.

POUŽITÍ XML INDEXU xml_index_name

Specifikuje primární XML index, který se používá při vytváření sekundárního XML indexu.

PRO { VALUE | PATH | VLASTNOST }

Specifikuje typ sekundárního XML indexu.

VALUE
Vytváří sekundární XML index ve sloupcích, kde jsou klíčové sloupce (hodnota uzlu a cesta) primárního XML indexu.

CESTA
Vytváří sekundární XML index ve sloupcích založených na hodnotách cesty a uzlů v primárním XML indexu. V sekundárním indexu PATH jsou hodnoty cesty a uzlů klíčovými sloupci, které umožňují efektivní vyhledávání při hledání cest.

VLASTNOST
Vytváří sekundární XML index na sloupcích (PK, cesta a hodnota uzlu) primárního XML indexu, kde PK je primárním klíčem základní tabulky.

<objektu >::=

Plně kvalifikovaný nebo nekvalifikovaný objekt, který se má indexovat.

database_name
Název databáze.

schema_name
Název schématu, do kterého tabulka patří.

table_name
Název tabulky, která se má indexovat.

<xml_index_option> ::=

Určuje možnosti, které se mají použít při vytváření indexu.

PAD_INDEX = { ON | VYPNUTO }

Určuje odsazení indexu. Výchozí nastavení je VYPNUTO.

ON
Procento volného místa specifikované fillfactorem se aplikuje na stránky indexu na střední úrovni.

OFF nebo fillfactor nejsou specifikovány
Zprostředkující stránky jsou vyplněné na blízkou kapacitě a dostatek místa pro alespoň jeden řádek maximální velikosti indexu může mít vzhledem k sadě klíčů na přechodných stránkách.

Možnost PAD_INDEX je užitečná pouze tehdy, když je specifikován FILLFACTOR, protože PAD_INDEX používá procento stanovené FILLFACTOR. Pokud procento uvedené pro FILLFACTOR není dostatečně velké pro jeden řádek, databázový engine interně toto procento přepsává a umožňuje minimální hodnotu. Počet řádků na mezilehlé indexové stránce nikdy není menší než dva, bez ohledu na to, jak nízká je hodnota fillfactoru.

FILLFACTOR = fillfactor

Určuje procento, které určuje, jak by měl databázový stroj během vytváření nebo opětovného sestavení vytvořit úroveň listu každé stránky indexu. Fillfactor musí být celočíselná hodnota od 1 do 100. Výchozí hodnota je 0. Pokud je fillfactor 100 nebo 0, databázový engine vytváří indexy s listovými stránkami naplněnými až do kapacity.

Poznámka:

Hodnoty výplňového faktoru 0 a 100 jsou ve všech ohledech stejné.

Nastavení FILLFACTOR platí pouze při vytvoření nebo obnovení indexu. Databázový stroj dynamicky neuchová zadané procento prázdného místa na stránkách. Chcete-li zobrazit nastavení faktoru vyplnění, použijte zobrazení katalogu sys.indexes .

Důležité

Vytvoření shlukovaného indexu s FILLFACTORem menším než 100 ovlivňuje množství úložného prostoru, který data zabírají, protože databázový engine data při vytváření shlukovaného indexu redistribuuje.

Další informace najdete v tématu Určení faktoru vyplnění indexu.

SORT_IN_TEMPDB = { ON | VYPNUTO }

Specifikuje, zda má dočasné seřazení ukládat v tempdb. Výchozí nastavení je VYPNUTO.

ON
Výsledky mezitřídění, které se používají k vytvoření indexu, jsou uloženy v tempdb. To může zkrátit čas potřebný k vytvoření indexu, pokud je tempdb na jiné sadě disků než uživatelská databáze. Tím se ale zvýší množství místa na disku, které se použije při sestavení indexu.

Vypnuto
Výsledky zprostředkujícího řazení jsou uloženy ve stejné databázi jako index.

Kromě místa potřebného v uživatelské databázi pro vytvoření indexu musí mít tempdb přibližně stejný objem volného místa pro uložení výsledků mezitřídění. Pro více informací viz SORT_IN_TEMPDB Option For Indexes.

IGNORE_DUP_KEY = VYPNUTO

Nemá to žádný vliv na XML indexy, protože typ indexu nikdy není jedinečný. Nenastavujte tuto možnost na ZAPNUTO, jinak se objeví chyba.

DROP_EXISTING = { ON | VYPNUTO }

Specifikuje, že pojmenovaný, již existující XML index je odstraněn a znovu sestaven. Výchozí nastavení je VYPNUTO.

ON
Existující index se odstraní a znovu sestaví. Zadaný název indexu musí být stejný jako aktuálně existující index; definici indexu však lze upravit. Můžete například zadat různé sloupce, pořadí řazení, schéma oddílů nebo možnosti indexu.

Vypnuto
Pokud zadaný název indexu již existuje, zobrazí se chyba.

Typ indexu nelze změnit pomocí DROP_EXISTING. Také primární XML index nelze redefinovat jako sekundární XML index, nebo naopak.

ONLINE = VYPNUTO

Určuje, že podkladové tabulky a přidružené indexy nejsou během operace indexu dostupné pro dotazy a úpravy dat. V této verzi SQL Serveru nejsou online indexové sestavy podporovány pro XML indexy. Pokud je tato volba nastavena na ON pro XML index, zobrazí se chyba. Buď vynechejte možnost ONLINE, nebo nastavte ONLINE na VYPNUTO.

Offline indexová operace, která vytvoří, znovu sestaví nebo zruší XML index, získá na tabulce zámek pro úpravu schématu (Sch-M). To zabraňuje veškerému přístupu uživatelů k podkladové tabulce během operace.

Poznámka:

Online indexovací operace nejsou k dispozici v každé edici Microsoft SQL Serveru. Seznam funkcí podporovaných edicemi SQL Serveru najdete v tématu Edice a podporované funkce systému SQL Server 2022.

ALLOW_ROW_LOCKS = { ON | VYPNUTO }

Určuje, jestli jsou povolené zámky řádků. Výchozí nastavení je ZAPNUTO.

ON
Zámky řádků jsou povoleny při přístupu k indexu. Databázový stroj určuje, kdy se používají zámky řádků.

Vypnuto
Zámky řádků se nepoužívají.

ALLOW_PAGE_LOCKS = { ON | VYPNUTO }

Určuje, jestli jsou povolené zámky stránek. Výchozí nastavení je ZAPNUTO.

ON
Zámky stránek jsou povoleny při přístupu k indexu. Databázový stroj určuje, kdy se používají zámky stránek.

Vypnuto
Zámky stránek se nepoužívají.

MAXDOP = max_degree_of_parallelism

Přepisuje možnost konfigurace konfigurace serveru Nastavit maximální stupeň paralelizmu během operace indexu. Pomocí funkce MAXDOP omezte počet procesorů používaných při paralelním provádění plánu. Maximum je 64 procesorů.

Důležité

Ačkoli je možnost MAXDOP syntakticky podporována pro všechny XML indexy, pro primární XML index CREATE XML INDEX používá pouze jeden procesor.

max_degree_of_parallelism může být:

1
Potlačuje vytvoření paralelního plánu.

>1
Omezuje maximální počet procesorů používaných v paralelní operaci indexu na zadané číslo nebo méně na základě aktuální systémové úlohy.

0 (výchozí)
Používá skutečný počet procesorů nebo méně na základě aktuální systémové úlohy.

Další informace naleznete v tématu Konfigurace paralelních indexových operací.

Poznámka:

Paralelní indexovací operace nejsou k dispozici v každé edici Microsoft SQL Serveru. Seznam funkcí podporovaných edicemi SQL Serveru najdete v tématu Edice a podporované funkce systému SQL Server 2022.

Poznámky

Vypočítané sloupce odvozené z XML datových typů lze indexovat buď jako klíč, nebo jako zahrnutý sloupec bez klíče, pokud je vypočítaný sloupec datového typu povolen jako sloupec indexového klíče nebo sloupec bez klíče. Nemůžete vytvořit primární XML index na vypočítaném XML sloupci.

Pro zobrazení informací o XML indexech použijte zobrazení katalogu sys.xml_indexes .

Pro více informací o XML indexech viz XML indexy (SQL Server).

Komprese XML

platí pro: SQL Server 2022 (16.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance.

  • Indexy XML nedědí vlastnost komprese tabulky. Chcete-li komprimovat indexy, musíte explicitně povolit kompresi XML u indexů XML.
  • Sekundární XML indexy nedědí kompresní vlastnost primárního XML indexu.
  • Ve výchozím nastavení je nastavení komprese XML pro indexy XML při vytváření indexu vypnuto.

Další poznámky k tvorbě rejstříku

Pro více informací o tvorbě indexu viz sekce "Poznámky" v CREATE INDEX (Transact-SQL).

Examples

Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .

A. Vytvoření primárního XML indexu

Následující příklad vytváří primární XML index ve sloupci CatalogDescription tabulky Production.ProductModel .

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. Vytvoření primárního XML indexu s kompresí XML

platí pro: SQL Server 2022 (16.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance.

Následující příklad vytváří primární XML index ve sloupci CatalogDescription tabulky Production.ProductModel .

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. Vytvoření sekundárního XML indexu

Následující příklad vytváří sekundární XML index na sloupci CatalogDescription v tabulce Production.ProductModel .

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. Vytvoření sekundárního XML indexu s kompresí XML

platí pro: SQL Server 2022 (16.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance.

Následující příklad vytváří sekundární XML index na sloupci CatalogDescription v tabulce Production.ProductModel .

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

Viz také