Udostępnij za pomocą


UTWÓRZ INDEKS XML (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Tworzy indeks XML na określonej tabeli. Indeks można utworzyć zanim dane pojawią się w tabeli. Indeksy XML można tworzyć na tabelach w innej bazie danych, podając kwalifikowaną nazwę bazy.

Uwaga / Notatka

Aby utworzyć indeks relacyjny, zobacz CREATE INDEX (Transact-SQL). Aby uzyskać informacje o tworzeniu indeksu przestrzennego, zobacz CREATE SPATIAL INDEX (Transact-SQL).

Transact-SQL konwencje składni

Składnia

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

[PODSTAWOWE] XML

Tworzy indeks XML na podanej kolumnie xml . Gdy określono NAMIAST, tworzony jest klastrowany indeks z kluczem klastrowanym utworzonym z klucza klastrującego tabeli użytkownika oraz identyfikatora węzła XML. Każda tabela może mieć do 249 indeksów XML. Zwróć uwagę na następujące rzeczy przy tworzeniu indeksu XML:

  • Indeks klastrowany musi istnieć w kluczu podstawowym tabeli użytkowników.

  • Klucz klastrowania tabeli użytkownika jest ograniczony do 15 kolumn.

  • Każda kolumna xml w tabeli może mieć jeden główny indeks XML oraz wiele wtórnych indeksów XML.

  • Pierwotny indeks XML musi istnieć na kolumnie xml , zanim można utworzyć wtórny indeks XML na tej kolumnie.

  • Indeks XML może być utworzony tylko na jednej kolumnie xml . Nie możesz utworzyć indeksu XML na kolumnie nie-xml , ani nie możesz utworzyć indeksu relacyjnego na kolumnie xml .

  • Nie możesz utworzyć indeksu XML, ani pierwotnego, ani wtórnego, na kolumnie xml w widoku, na zmiennej tabelowej z kolumnami xml ani na zmiennych typu xml .

  • Nie możesz utworzyć głównego indeksu XML na obliczonej kolumnie xml .

  • Ustawienia opcji SET muszą być takie same jak wymagane dla widoków indeksowanych i obliczonych indeksów kolumnowych. Konkretnie, opcja ARITHABORT musi być ustawiona na ON podczas tworzenia indeksu XML oraz podczas wstawiania, usuwania lub aktualizacji wartości w kolumnie xml .

Aby uzyskać więcej informacji, zobacz indeksy XML dla SQL Server .

index_name

Nazwa indeksu. Nazwy indeksów muszą być unikatowe w tabeli, ale nie muszą być unikatowe w bazie danych. Nazwy indeksów muszą być zgodne z regułami identyfikatorów.

Nazwy głównych indeksów XML nie mogą zaczynać się od następujących znaków: #, , ##@, lub @@.

xml_column_name

Kolumna xml , na której opiera się indeks. W jednej definicji indeksu XML można określić tylko jedną kolumnę xml ; jednak na jednej kolumnie XML można utworzyć wiele wtórnych indeksów XML.

UŻYWAJĄC INDEKSU XML xml_index_name

Określa główny indeks XML do utworzenia wtórnego indeksu XML.

DLA { WARTOŚCI | ŚCIEŻKA | WŁASNOŚĆ }

Określa typ wtórnego indeksu XML.

VALUE
Tworzy wtórny indeks XML na kolumnach, gdzie znajdują się kolumny kluczowe (wartość węzła i ścieżka) pierwotnego indeksu XML.

ŚCIEŻKA
Tworzy wtórny indeks XML na kolumnach opartych na wartościach ścieżki i węzłów w pierwotnym indeksie XML. W indeksie wtórnym PATH wartości ścieżki i węzła są kolumnami kluczowymi, które umożliwiają efektywne wyszukiwania podczas wyszukiwania ścieżek.

WŁASNOŚĆ
Tworzy wtórny indeks XML na kolumnach (PK, ścieżka i wartość węzła) pierwotnego indeksu XML, gdzie PK jest kluczem głównym tabeli bazowej.

<obiektu>::=

W pełni kwalifikowany lub nieuprzykwalifikowany obiekt do indeksowania.

database_name
Nazwa bazy danych.

schema_name
Nazwa schematu, do którego należy tabela.

table_name
Nazwa tabeli do indeksowania.

<xml_index_option> ::=

Określa opcje do użycia podczas tworzenia indeksu.

PAD_INDEX = { ON | WYŁ. }

Określa dopełnienie indeksu. Domyślnie jest WYŁĄCZONE.

ON
Procent wolnej przestrzeni określony przez fillfactor jest stosowany do stron indeksu na poziomie średnim.

OFF ani fillfactor nie są określone
Strony na poziomie pośrednim są wypełniane w pobliżu pojemności, pozostawiając wystarczającą ilość miejsca dla co najmniej jednego wiersza maksymalnego rozmiaru indeksu, biorąc pod uwagę zestaw kluczy na stronach pośrednich.

Opcja PAD_INDEX jest użyteczna tylko wtedy, gdy podano FILLFACTOR, ponieważ PAD_INDEX wykorzystuje procent określony przez FILLFACTOR. Jeśli procent określony dla FILLFACTOR nie jest wystarczająco duży, by umożliwić jeden wiersz, silnik bazy danych wewnętrznie nadpisuje ten procent, aby uwzględnić minimum. Liczba wierszy na stronie indeksu pośredniego nigdy nie jest mniejsza niż dwa, niezależnie od tego, jak niska jest wartość wypełnienia.

FILLFACTOR = wypełnienie

Określa wartość procentową wskazującą, jak pełny aparat bazy danych powinien ustawić poziom liścia każdej strony indeksu podczas tworzenia lub odbudowy indeksu. Współczynnik wypełnienia musi być wartością całkowitą od 1 do 100. Wartość domyślna to 0. Jeśli współczynnik wypełnienia wynosi 100 lub 0, silnik bazy danych tworzy indeksy z listami wypełnionymi do końca.

Uwaga / Notatka

Wartości współczynnika wypełnienia 0 i 100 są takie same we wszystkich aspektach.

Ustawienie FILLFACTOR obowiązuje tylko wtedy, gdy indeks zostanie utworzony lub odtworzony. Aparat bazy danych nie zachowuje dynamicznie określonego procentu pustego miejsca na stronach. Aby wyświetlić ustawienie współczynnika wypełnienia, użyj widoku wykazu sys.indexes .

Ważne

Utworzenie klastrowanego indeksu z FILLFACTOREM mniejszym niż 100 wpływa na ilość miejsca pamięci danych, ponieważ silnik bazy danych redystrybuuje dane podczas tworzenia klastrowanego indeksu.

Aby uzyskać więcej informacji, zobacz Określanie współczynnika wypełnienia dla indeksu.

SORT_IN_TEMPDB = { ON | WYŁ. }

Określa, czy tymczasowe wyniki sortowania mają być przechowywane w tempdb. Domyślnie jest WYŁĄCZONE.

ON
Wyniki pośredniego sortowania, które są używane do budowy indeksu, są przechowywane w tempdb. Może to skrócić czas potrzebny na utworzenie indeksu, jeśli tempdb znajduje się na innym zestawie dysków niż baza danych użytkownika. Zwiększa to jednak ilość miejsca na dysku używanego podczas kompilacji indeksu.

OFF
Wyniki sortowania pośredniego są przechowywane w tej samej bazie danych co indeks.

Oprócz miejsca potrzebnego w bazie danych użytkownika do utworzenia indeksu, tempdb musi mieć mniej więcej tyle samo wolne miejsca, aby przechowywać wyniki pośredniego sortowania. Więcej informacji można znaleźć w SORT_IN_TEMPDB Opcja Indeksów.

IGNORE_DUP_KEY = WYŁĄCZ

Nie ma to wpływu na indeksy XML, ponieważ typ indeksu nigdy nie jest unikalny. Nie ustawiaj tej opcji na WŁĄCZONE, bo pojawi się błąd.

DROP_EXISTING = { ON | WYŁ. }

Określa, że nazwany, istniejący indeks XML jest usuwany i odtworzony. Domyślnie jest WYŁĄCZONE.

ON
Istniejący indeks jest porzucany i odbudowywany. Określona nazwa indeksu musi być taka sama jak aktualnie istniejący indeks; można jednak zmodyfikować definicję indeksu. Można na przykład określić różne kolumny, kolejność sortowania, schemat partycji lub opcje indeksu.

OFF
Jeśli określona nazwa indeksu już istnieje, zostanie wyświetlony błąd.

Nie można zmienić typu indeksu przy użyciu DROP_EXISTING. Ponadto pierwotny indeks XML nie może być zdefiniowany jako wtórny indeks XML ani odwrotnie.

ONLINE = WYŁĄCZONE

Określa, że tabele bazowe i skojarzone indeksy nie są dostępne dla zapytań i modyfikacji danych podczas operacji indeksu. W tej wersji SQL Server konfiguracje indeksów online nie są obsługiwane dla indeksów XML. Jeśli ta opcja jest ustawiona na ON dla indeksu XML, pojawia się błąd. Albo pomiń opcję ONLINE, albo ustaw ONLINE na WYŁĄCZONE.

Operacja indeksu offline, która tworzy, odbudowuje lub usuwa indeks XML, uzyskuje blokadę modyfikacji schematu (Sch-M) na tabeli. Uniemożliwia to użytkownikowi dostęp do bazowej tabeli podczas operacji.

Uwaga / Notatka

Operacje indeksowania online nie są dostępne w każdej wersji programu Microsoft SQL Server. Aby uzyskać listę funkcji obsługiwanych przez wersje programu SQL Server, zobacz Editions i obsługiwane funkcje programu SQL Server 2022.

ALLOW_ROW_LOCKS = { ON | WYŁ. }

Określa, czy blokady wierszy są dozwolone. Domyślnie jest WŁĄCZONE.

ON
Blokady wierszy są dozwolone podczas uzyskiwania dostępu do indeksu. Aparat bazy danych określa, kiedy są używane blokady wierszy.

OFF
Blokady wierszy nie są używane.

ALLOW_PAGE_LOCKS = { ON | WYŁ. }

Określa, czy blokady strony są dozwolone. Domyślnie jest WŁĄCZONE.

ON
Blokady stron są dozwolone podczas uzyskiwania dostępu do indeksu. Aparat bazy danych określa, kiedy są używane blokady strony.

OFF
Blokady stron nie są używane.

MAXDOP = max_degree_of_parallelism

Nadpisuje opcję konfiguracji konfiguracji serwera Konfiguruj maksymalny stopień równoległości podczas operacji indeksu. Użyj opcji MAXDOP, aby ograniczyć liczbę procesorów używanych w równoległym wykonywaniu planu. Maksymalna wartość to 64 procesory.

Ważne

Chociaż opcja MAXDOP jest składniowo wspierana dla wszystkich indeksów XML, dla podstawowego indeksu XML CREATE XML INDEX używa tylko jednego procesora.

max_degree_of_parallelism może to być:

1
Zatrzymuje generowanie planu równoległego.

>1
Ogranicza maksymalną liczbę procesorów używanych w operacji indeksowania równoległego do określonej liczby lub mniejszej na podstawie bieżącego obciążenia systemu.

0 (wartość domyślna)
Używa rzeczywistej liczby procesorów lub mniej na podstawie bieżącego obciążenia systemu.

Aby uzyskać więcej informacji, zobacz Konfigurowanie operacji indeksu równoległego.

Uwaga / Notatka

Operacje indeksowania równoległego nie są dostępne w każdej wersji programu Microsoft SQL Server. Aby uzyskać listę funkcji obsługiwanych przez wersje programu SQL Server, zobacz Editions i obsługiwane funkcje programu SQL Server 2022.

Uwagi

Kolumny wyprowadzone z typów danych xml mogą być indeksowane jako kolumna klucza lub jako włączona kolumna nieklucza, o ile obliczony typ danych kolumny jest dopuszczalny jako kolumna klucza indeksowego lub kolumna nieklucza. Nie możesz utworzyć głównego indeksu XML na obliczonej kolumnie xml .

Aby zobaczyć informacje o indeksach XML, użyj widoku katalogu sys.xml_indexes .

Więcej informacji o indeksach XML można znaleźć w artykule Indeksy XML (SQL Server).

Kompresja XML

Dotyczy: SQL Server 2022 (16.x) i nowsze wersje, Azure SQL Database i Azure SQL Managed Instance.

  • Indeksy XML nie dziedziczą właściwości kompresji tabeli. Aby skompresować indeksy, należy jawnie włączyć kompresję XML w indeksach XML.
  • Wtórne indeksy XML nie dziedziczą właściwości kompresji pierwotnego indeksu XML.
  • Domyślnie kompresja XML dla indeksów XML jest wyłączona podczas tworzenia indeksu.

Dodatkowe uwagi dotyczące tworzenia indeksu

Więcej informacji o tworzeniu indeksu można znaleźć w sekcji " Uwagi" w CREATE INDEX (Transact-SQL).

Przykłady

Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2025 lub AdventureWorksDW2025, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.

A. Tworzenie podstawowego indeksu XML

Poniższy przykład tworzy główny indeks XML na kolumnie CatalogDescription w tabeli 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. Tworzenie podstawowego indeksu XML z kompresją XML

Dotyczy: SQL Server 2022 (16.x) i nowsze wersje, Azure SQL Database i Azure SQL Managed Instance.

Poniższy przykład tworzy główny indeks XML na kolumnie CatalogDescription w tabeli 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. Tworzenie wtórnego indeksu XML

Poniższy przykład tworzy wtórny indeks XML na kolumnie CatalogDescription w tabeli 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. Tworzenie wtórnego indeksu XML z kompresją XML

Dotyczy: SQL Server 2022 (16.x) i nowsze wersje, Azure SQL Database i Azure SQL Managed Instance.

Poniższy przykład tworzy wtórny indeks XML na kolumnie CatalogDescription w tabeli 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

Zobacz także