Udostępnij za pośrednictwem


Tworzenie indeksów XML

W tym temacie opisano sposób tworzenia indeksów XML podstawowych i pomocniczych.

Tworzenie indeks podstawowego XML

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

Podczas tworzenia indeksu XML, należy uwzględnić następujące:

  • Tworzenie podstawowego XML indeksu, 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 w tabela bazowa jest podzielony na partycje, indeks główny XML można można podzielić na partycje przy użyciu tego samego schematu partycjonowanie na partycje, a funkcja partycjonowanie.

  • Jeśli istnieje indeks XML, nie można modyfikować klastrowanych, podstawowego klucz tabela.Należy usunąć wszystkie indeksy XML w tabela przed rozpoczęciem modyfikowania klucz podstawowy.

  • Indeks główny XML mogą być tworzone na pojedyncze xml Typ kolumna. Nie można utworzyć typ indeksu kolumna Typ XML jako kolumna klucz.Można jednak dołączyć xml Kolumna typu L w indeksie-XML. Każdy xml Typ kolumna w tabela może mieć swój własny indeks główny XML. Jednakże tylko jeden podstawowy XML indeksu na xml typem kolumna jest dozwolone.

  • Indeksy XML znajdują się w tym samym obszarem nazw jako XML inny niż indeksów.Z tego powodu można mieć indeks XML i XML inny niż indeks dla tej samej tabela o tej samej nazwie.

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

  • grupa plików lub informacje o partycjonowanie tabela użytkowników zostanie zastosowany do indeksu XML.Użytkownicy nie mogą określać je oddzielnie na indeks XML.

  • Opcja indeksu DROP_EXISTING może upuść indeksu głównego XML i utworzyć nowy indeks XML podstawowego, lub upuść pomocniczy indeksu XML i utworzyć nowy indeks XML pomocniczego.Jednak opcja ta nie można usunąć pomocnicze indeksu XML do utworzenia nowy podstawowy XML indeksu i vice versa.

  • Nazwy indeksów podstawowego XML mają te same ograniczenia, jak nazwy widoku.

Nie można utworzyć indeksu XML na xml kolumna w widoku, należy wpisać w Tabela wyceniane zmiennaxml kolumna, należy wpisać lub xml Wpisz zmiennych.

  • Aby zmienić xml Typ kolumna z bez typu do określonego pliku XML, lub odwrotnie, za pomocą opcji instrukcji ALTER kolumna instrukcji ALTER tabela powinna istnieć indeks nie XML na podstawie kolumna. Jeśli istnieje, musi być odrzucone, zanim zostanie podjęta próba zmiany typu kolumna.

  • Opcja musi być ARITHABORT zestaw on podczas tworzenia indeksu XML.Aby wykonać kwerendę, wstawiania, usuwania lub aktualizacji wartości kolumna XML przy użyciu metod typu danych XML, ta sama opcja musi być zestaw w danym połączeniu.Jeśli nie jest, metod typu danych XML nie powiedzie się.

    Uwaga

    Informacje o indeksie XML znajduje się widoki wykazu.Jednak sp_helpindex nie jest obsługiwana.Przykłady podane w dalszej części tego tematu przedstawiono sposób widoki wykazu, aby znaleźć informacje o indeksach XML kwerendy.

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 zobaczTyped XML Compared to Untyped XML.

Przykład: Tworzenie indeks podstawowy XML

T (pk INT klucz podstawowy xCol XML) tabela z kolumną bez typu XML jest używany w większości przykładów.Te mogą być rozszerzane do określonego pliku XML w prosty sposób.Aby uzyskać więcej informacji na temat korzystania z wpisaną XML zobacz Implementing XML in SQL Server.) Dla uproszczenia kwerendy są opisane dla wystąpień danych XML jak pokazano poniżej:

<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 powoduje utworzenie indeksu XML o nazwie idx_xCol, na xCol XML kolumna tabela T:

CREATE PRIMARY XML INDEX idx_xCol on T (xCol)

Tworzenie jest dodatkowy indeks XML

Use the CREATE INDEX (języka 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, należy uwzględnić następujące:

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

  • Pomocniczy indeksy są podzielone na partycje tak samo, jak indeks główny XML.

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

Kwerendy można sys.xml_indexes widoku katalogu, aby pobrać informacje o indeksach XML.Należy zauważyć, że secondary_type_desc kolumnasys.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ść lub właściwość.Indeks główny XML wartość zwracana jest wartość NULL.

Przykład: Tworzenie indeksów pomocniczych XML

Poniższy przykład ilustruje sposób pomocniczy XML indeksy są tworzone.W przykładzie przedstawiono również informacje o indeksach XML, który został utworzony.

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 Aby pobrać informacje o indeksach XML. The secondary_type_desc kolumna provides the secondary index type.

SELECT  * 
FROM    sys.xml_indexes

Widok katalogu informacje o indeksach również mogą kwerendy.

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

Można dodawać dane przykładowe i następnie przejrzeć informacje o indeksach 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