Udostępnij za pośrednictwem


Tworzenie indeksów XML

W tym temacie opisano sposób tworzenia indeksów XML podstawowego i pomocniczego.

Tworzenie indeksu głównego XML

To create a primary XML index, use the CREATE INDEX (Transact-SQL) Transact-SQL DDL statement.Nie wszystkie opcje dostępne dla indeksów XML nie są obsługiwane na indeksy XML.

Podczas tworzenia indeksu XML pod uwagę następujące:

  • Aby utworzyć podstawowy XML, indeks tabeli, która zawiera kolumna XML są indeksowane, o nazwie tabela bazowa, musi mieć indeks klastrowany klucz podstawowy.Dzięki temu upewnić się, że jeśli tabela bazowa jest podzielony na partycje, indeks podstawowy XML można podzielić na partycje przy użyciu tego samego schematu partycjonowanie na partycje i podział funkcja.

  • Jeśli istnieje indeks XML, klastrowany klucz podstawowy tabela nie można modyfikować.Należy usunąć wszystkie indeksy XML w tabela przed modyfikacją klucz podstawowy.

  • Indeks główny XML można utworzyć na jednym xml typu kolumna.Nie można utworzyć typ indeksu kolumna Typ XML jako kolumna klucz.Może jednak zawierać xml kolumna typu L XML inny niż indeks.Każdy xml Typ kolumna w tabela może mieć własny podstawowego indeksu XML.Jednakże tylko jeden podstawowy XML indeksu na xml Dozwolony typ kolumna.

  • Indeksy XML istnieje w tym samym obszarze nazw jako indeksów XML programu.Dlatego nie mogą mieć indeks XML i indeks XML inny niż w tej samej tabela o tej samej nazwie.

  • Opcje IGNORE_DUP_KEY i w trybie ONLINE są zawsze zestaw do OFF indeksów XML.Te opcje można określić wartość OFF.

  • Grupa plików lub partycjonowanie informacji w tabela użytkownika jest stosowane do indeksu XML.Użytkownicy nie mogą określać oddzielnie na indeks XML.

  • Opcja Indeks DROP_EXISTING można upuścić indeksu głównego XML i utworzyć nowy indeks XML podstawowego, lub upuść pomocniczy indeksu XML i utworzyć nowy indeks pomocniczy XML.Jednak opcja ta nie można usunąć pomocnicze indeksu XML do utworzenia nowego podstawowego XML indeksu lub na odwrót.

  • Podstawowy XML indeksu nazwy te same ograniczenia jako nazwy widoku.

Nie można utworzyć indeksu XML na xml Wpisz kolumna w widoku, na tabela wyceniane zmiennej z xml kolumna, wpisz lub xml zmiennych typu.

  • Aby zmienić xml kolumna typu bez do wpisany XML lub odwrotnie, korzystając z opcji ZMIEŃ kolumna tabeli ZMIENIA indeks nie XML na kolumnie powinien istnieć.Jeśli istnieje, muszą usunięte przed próbowano zmienić typ kolumna.

  • Opcja musi być ARITHABORT zestaw on podczas tworzenia indeksu XML.Aby wykonać kwerendę, Wstaw, usuń lub Aktualizuj wartości kolumna XML przy użyciu metod typu danych XML, tej samej opcji musi być zestaw połączenia.Jeśli nie jest, metod typu danych XML nie powiedzie się.

    Ostrzeżenie

    Informacje dotyczące indeksu XML można znaleźć widoki wykazu.Jednakże sp_helpindex nie jest obsługiwane.Przedstawione w dalszej części tego tematu przykłady przedstawiają kwerendy widoki wykazu, aby znaleźć informacje o indeksie XML.

When creating or recreating a primary XML index on an XML data type column that contains values of the XML Schema types xs:date or xs:dateTime (or any subtypes of these types) that have a year of less than 1, the index creation will fail in SQL Server 2008.SQL Server 2005 allowed these values, so this problem can occur when creating indexes in a database generated in SQL Server 2005.Aby uzyskać więcej informacji, zobacz XML wpisywanych w porównaniu do pliku XML bez typu.

Przykład: Tworzenie indeksu głównego XML

Tabela XML bez typu T (pk klucza podstawowego INT xCol XML) kolumna jest używany w większości przykładów.Te można rozszerzyć na XML wpisywanych w prosty sposób.Aby uzyskać więcej informacji na temat używania wpisany XML, zobacz Implementowanie XML w programie SQL Server.) Dla uproszczenia kwerend dla wystąpień danych XML są opisane, jak pokazano w poniższym:

<book genre="security" publicationdate="2002" ISBN="0-7356-1588-2">
   <title>Writing Secure Code</title>
   <author>
      <first-name>Michael</first-name>
      <last-name>Howard</last-name>
   </author>
   <author>
      <first-name>David</first-name>
      <last-name>LeBlanc</last-name>
   </author>
   <price>39.99</price>
</book>

Poniższa instrukcja tworzy indeks XML o nazwie idx_xCol, w xCol XML kolumna tabela T:

CREATE PRIMARY XML INDEX idx_xCol on T (xCol)

Tworzenie pomocniczy indeksu XML

Use the CREATE INDEX (Transact-SQL) Transact-SQL DDL statement to create secondary XML indexes and specify the type of the secondary XML index that you want.

Podczas tworzenia indeksów pomocniczych XML pod uwagę następujące:

  • Wszystkie opcje indeksowania, które dotyczą indeks nieklastrowany, z wyjątkiem IGNORE_DUP_KEY i ONLINE, są dozwolone na indeksów pomocniczych XML.Dwie opcje musi być zawsze zestaw do OFF dla indeksów pomocniczych XML.

  • Podobnie jak indeks podstawowy XML są odseparowane indeksów pomocniczych.

  • DROP_EXISTING można upuścić pomocniczy indeksu na tabela użytkownika i utworzyć pomocniczy indeks dla tabela użytkownika.

Kwerendy można sys.xml_indexes katalogu w celu pobrania informacji o indeksie XML.Należy zauważyć, że secondary_type_desc kolumna w sys.xml_indexes wykazu widok zawiera typ pomocniczy indeksu:

SELECT  * 
FROM    sys.xml_indexes

Wartości zwracane w secondary_type_desc kolumna może być NULL, ŚCIEŻKA, wartości lub właściwości.Podstawowy indeksu XML zwrócona wartość jest NULL.

Przykład: Tworzenie indeksów pomocniczych XML

Poniższy przykład ilustruje sposób pomocniczy XML są tworzone indeksy.W przykładzie pokazano również informacje o indeksach XML utworzone.

CREATE TABLE T (Col1 INT PRIMARY KEY, XmlCol XML)
GO
-- Create primary index.
CREATE PRIMARY XML INDEX PIdx_T_XmlCol 
ON T(XmlCol)
GO
-- Create secondary indexes (PATH, VALUE, PROPERTY).
CREATE XML INDEX PIdx_T_XmlCol_PATH ON T(XmlCol)
USING XML INDEX PIdx_T_XmlCol
FOR PATH
GO
CREATE XML INDEX PIdx_T_XmlCol_VALUE ON T(XmlCol)
USING XML INDEX PIdx_T_XmlCol
FOR VALUE
GO
CREATE XML INDEX PIdx_T_XmlCol_PROPERTY ON T(XmlCol)
USING XML INDEX PIdx_T_XmlCol
FOR PROPERTY
GO

Kwerendy można sys.xml_indexes do pobierania informacji o indeksach XML.secondary_type_desc Zawiera kolumna typu pomocniczego indeksu.

SELECT  * 
FROM    sys.xml_indexes

Można również kwerendy widoku wykazu indeksu informacji.

SELECT *
FROM sys.xml_indexes
WHERE object_id = object_id('T')

Można dodać przykładowe dane, a następnie przejrzyj informacje o indeksie XML.

INSERT INTO T VALUES (1,
'<doc id="123">
<sections>
<section num="2">
<heading>Background</heading>
</section>
<section num="3">
<heading>Sort</heading>
</section>
<section num="4">
<heading>Search</heading>
</section>
</sections>
</doc>')
GO
-- Check XML index information.
SELECT *
FROM   sys.dm_db_index_physical_stats (db_id(), object_id('T'), NULL, NULL, 'DETAILED')
GO
-- Space usage of primary XML index
DECLARE @index_id int
SELECT  @index_id = i.index_id
FROM    sys.xml_indexes i 
WHERE   i.name = 'PIdx_T_XmlCol' and object_name(i.object_id) = 'T'
 
SELECT *
FROM sys.dm_db_index_physical_stats (db_id(), object_id('T') , @index_id, DEFAULT, 'DETAILED')
go
--- Space usage of secondary XML index (for example PATH secondary index)  PIdx_T_XmlCol_PATH
DECLARE @index_id int
SELECT  @index_id = i.index_id 
FROM    sys.xml_indexes i 
WHERE  i.name = 'PIdx_T_XmlCol_PATH' and object_name(i.object_id) = 'T'
 
SELECT *
FROM sys.dm_db_index_physical_stats (db_id(), object_id('T') , @index_id, DEFAULT, 'DETAILED')
go
 
-- Space usage of all secondary XML indexes for a particular table
SELECT i.name, object_name(i.object_id), stats.* 
FROM   sys.dm_db_index_physical_stats (db_id(), object_id('T'), NULL, DEFAULT, 'DETAILED') stats
JOIN sys.xml_indexes i ON (stats.object_id = i.object_id and stats.index_id = i.index_id)
WHERE secondary_type is not null
-- Drop secondary indexes.
DROP INDEX PIdx_T_XmlCol_PATH ON T
GO
DROP INDEX PIdx_T_XmlCol_VALUE ON T
GO
DROP INDEX PIdx_T_XmlCol_PROPERTY ON T
GO
-- Drop primary index.
DROP INDEX PIdx_T_XmlCol ON T
-- Drop table T.
DROP TABLE T
Go

Zobacz także

Koncepcje