Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Selektywne indeksy XML to inny typ indeksu XML, który jest dostępny oprócz zwykłych indeksów XML. Cele funkcji selektywnego indeksu XML są następujące:
Aby zwiększyć wydajność zapytań dotyczących danych XML przechowywanych w programie SQL Server.
Aby obsługiwać szybsze indeksowanie dużych obciążeń danych XML.
Aby zwiększyć skalowalność, zmniejszając koszty magazynowania indeksów XML.
Głównym ograniczeniem dla zwykłych indeksów XML jest to, że indeksują cały dokument XML. Prowadzi to do kilku znaczących wad, takich jak zmniejszenie wydajności zapytań i zwiększenie kosztów konserwacji indeksu, głównie związanych z kosztami magazynowania indeksu.
Funkcja selektywnego indeksu XML umożliwia promowanie tylko określonych ścieżek z dokumentów XML w indeksie. W czasie tworzenia indeksu te ścieżki są oceniane, a węzły, do których wskazują, są rozdrobnione i przechowywane wewnątrz tabeli relacyjnej w programie SQL Server. Ta funkcja używa wydajnego algorytmu mapowania opracowanego przez firmę Microsoft Research we współpracy z zespołem produktu SQL Server. Ten algorytm mapuje węzły XML na jedną tabelę relacyjną i osiąga wyjątkową wydajność, jednocześnie wymagając tylko skromnego miejsca do magazynowania.
Funkcja selektywnego indeksu XML obsługuje również pomocnicze selektywne indeksy XML dla węzłów, które zostały indeksowane przez selektywny indeks XML. Te pomocnicze indeksy selektywne są wydajne i dodatkowo zwiększają wydajność zapytań.
Zalety selektywnych indeksów XML
Selektywne indeksy XML zapewniają następujące korzyści:
Znacznie zwiększona wydajność zapytań względem typu danych XML dla typowych obciążeń zapytań.
Zmniejszone wymagania dotyczące magazynu w porównaniu ze zwykłymi indeksami XML.
Obniżone koszty konserwacji indeksu w porównaniu ze zwykłymi indeksami XML.
Nie trzeba aktualizować aplikacji, aby korzystać z selektywnych indeksów XML.
Selektywne indeksy XML i podstawowe indeksy XML
Ważne
Utwórz selektywny indeks XML zamiast zwykłego indeksu XML w większości przypadków dla lepszej wydajności i efektywniejszego przechowywania.
Jednak selektywny indeks XML nie jest zalecany, jeśli spełniony jest jeden z następujących warunków:
Mapujesz dużą liczbę ścieżek węzłów.
Obsługujesz zapytania dotyczące nieznanych elementów lub elementów znajdujących się w nieznanej lokalizacji w strukturze dokumentu.
Przykład selektywnego indeksu XML
Rozważmy następujący fragment XML jako dokument XML w tabeli zawierającej około 500 000 wierszy:
<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>
Tworzenie podstawowego indeksu XML dla tak wielu wierszy tego prostego schematu trwa długo. Zapytania dotyczące tych danych również cierpią z powodu tego, że podstawowy indeks XML nie obsługuje indeksowania selektywnego.
Jeśli potrzebujesz tylko wykonać zapytanie dotyczące tych danych na /book/title ścieżce i ścieżce /book/subjects , możesz utworzyć następujący selektywny indeks 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)
);
Poprzednia instrukcja jest dobrym przykładem składni CREATE używanej podczas tworzenia selektywnego indeksu XML. W instrukcji CREATE najpierw podaj nazwę indeksu i zidentyfikuj tabelę i kolumnę XML do indeksowania. Następnie należy podać ścieżki do zaindeksowania. Ścieżka ma trzy części:
Nazwa, która jednoznacznie identyfikuje ścieżkę.
Wyrażenie XQuery, które opisuje ścieżkę.
Opcjonalne wskazówki dotyczące optymalizacji.
Aby uzyskać więcej informacji o tych elementach, zobacz Powiązane zadania.
Obsługiwane funkcje, wymagania wstępne i ograniczenia
Obsługiwane funkcje XML
Selektywne indeksy XML obsługują XQuery obsługiwane przez program SQL Server wewnątrz metod exist(), value() i nodes().
Dla metod
exist(),value()inodes()selektywne indeksy XML zawierają wystarczającą ilość informacji, aby przekształcić całe wyrażenie.W przypadku metod
query()imodify()selektywne indeksy XML mogą być używane tylko do filtrowania węzłów.W przypadku
query()metody selektywne indeksy XML nie są używane do pobierania wyników.W przypadku
modify()metody selektywne indeksy XML nie są używane do aktualizowania dokumentów XML.
Nieobsługiwane funkcje XML
Selektywne indeksy XML nie obsługują następujących funkcji obsługiwanych w implementacji xml programu SQL Server:
Indeksowanie węzłów ze złożonymi typami XS: typy unii, typy sekwencji i typy list.
Indeksowanie węzłów z binarnymi typami XS: na przykład base64Binary i hexBinary.
Określanie węzłów do indeksowania za pomocą wyrażeń XPath zawierających symbol
*wieloznaczny na końcu: na przykład ,/a/b/c/*,/a//b/*lub/a/b/*:c.Indeksowanie dowolnej osi innej niż podrzędna, atrybut lub element potomny. Sprawa
//<step>jest dozwolona jako szczególny przypadek.Indeksowanie instrukcji i komentarzy dotyczących przetwarzania XML.
Określanie i pobieranie identyfikatora węzła przy użyciu funkcji id().
Wymagania wstępne
Przed utworzeniem selektywnego indeksu XML w kolumnie XML w tabeli użytkownika muszą istnieć następujące wymagania wstępne:
Indeks klastrowany musi istnieć w kluczu podstawowym tabeli użytkowników.
Klucz podstawowy tabeli użytkownika jest ograniczony do rozmiaru 128 bajtów w przypadku użycia z selektywnymi indeksami XML.
Klucz klastrowania tabeli użytkownika jest ograniczony do 15 kolumn w przypadku użycia z selektywnymi indeksami XML.
Ograniczenia
Ogólne wymagania i ograniczenia
- Każdy selektywny indeks XML można utworzyć tylko w jednej kolumnie XML
- Nie można utworzyć selektywnego indeksu XML w kolumnie innej niż XML
- Każda kolumna XML w tabeli może mieć tylko jeden selektywny indeks XML
- Każda tabela może mieć maksymalnie 249 selektywnych indeksów XML.
Ograniczenia dotyczące obsługiwanych obiektów
Nie można utworzyć selektywnych indeksów XML w następujących obiektach:
- Kolumny XML w widoku
- Zmienna tabelowa z kolumnami XML
- Zmienne typu XML
- Obliczone kolumny XML
- Kolumny XML o głębokości przekraczającej 128 zagnieżdżonych węzłów.
Ograniczenia magazynu
Istnieje ograniczony limit liczby węzłów z dokumentu XML, który można dodać do indeksu. Selektywny indeks XML mapuje dokumenty XML na jedną tabelę relacyjną. W związku z tym nie może zawierać więcej niż 1024 kolumn innych niż null w żadnym wierszu tabeli. Ponadto wiele ograniczeń kolumn rozrzedzywanych ma również zastosowanie do selektywnych indeksów XML, ponieważ indeksy używają kolumn rozrzednych do magazynowania.
Maksymalna liczba kolumn innych niż null obsługiwanych w danym wierszu zależy od rozmiaru danych w kolumnach:
W najlepszym przypadku obsługiwane są 1024 kolumny niepuste, gdy wszystkie kolumny są typu bit.
W najgorszym przypadku tylko 236 kolumn innych niż null jest obsługiwanych, gdy wszystkie kolumny są dużymi obiektami typu varchar.
Selektywne indeksy XML używają od jednej do czterech kolumn wewnętrznie dla każdej ścieżki węzła, która jest indeksowana. Całkowita liczba węzłów, które mogą być indeksowane, waha się od 60 do kilkuset węzłów, w zależności od rzeczywistego rozmiaru danych w indeksowanych ścieżkach.
W najgorszym przypadku, gdy niektóre lub wszystkie węzły są mapowane przy użyciu
//w definicji ścieżki węzła, maksymalna liczba indeksowanych węzłów wynosi 60.W najlepszym przypadku, gdy węzły są mapowane bez użycia
//w definicji ścieżki węzła, maksymalna liczba indeksowanych węzłów wynosi 200.
Selektywne indeksy XML są odbudowywane podczas tworzenia lub zmieniania indeksu
Gdy tworzysz lub zmieniasz selektywny indeks XML, jest on odbudowywany w trybie jednowątkowym, offline. Często instrukcje ALTER negatywnie wpływają na wydajność zapytań względem indeksowanych dokumentów XML.
Inne ograniczenia
Selektywne indeksy XML nie są obsługiwane w wskazówkach dotyczących zapytań.
Selektywne indeksy XML i pomocnicze selektywne indeksy XML nie są obsługiwane w usłudze Database Tuning Advisor.