Udostępnij za pośrednictwem


Modyfikowanie indeksów XML

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Instrukcje ALTER INDEX (Transact-SQL)Transact-SQL języka DDL mogą służyć do modyfikowania istniejących indeksów XML i innych niż XML. Jednak nie wszystkie opcje ALTER INDEX są dostępne dla indeksów XML. Następujące opcje nie są prawidłowe podczas modyfikowania indeksów XML:

  • Opcja ponownego kompilowania i ustawiania IGNORE_DUP_KEY nie jest prawidłowa dla indeksów XML. Opcja ponownej kompilacji ONLINE musi być ustawiona na WYŁ. dla pomocniczych indeksów XML. Opcja DROP_EXISTING nie jest dozwolona w instrukcji ALTER INDEX.

  • Modyfikacje ograniczenia klucza podstawowego w tabeli użytkownika nie są automatycznie propagowane do indeksów XML. Użytkownik musi najpierw usunąć indeksy XML, a następnie ponownie je utworzyć.

  • Jeśli parametr ALTER INDEX ALL jest określony, dotyczy zarówno indeksów innych niż XML, jak i XML. Można określić opcje indeksowania, które nie są prawidłowe dla obu typów indeksów. W tym przypadku całe oświadczenie kończy się niepowodzeniem.

Przykłady

Modyfikowanie indeksu XML

W poniższym przykładzie tworzony jest indeks XML, a następnie modyfikowany przez ustawienie opcji ALLOW_ROW_LOCKS na OFF. Gdy ALLOW_ROW_LOCKS jest OFF, wiersze nie są zablokowane, a dostęp do określonych indeksów jest uzyskiwany przy użyciu blokad na poziomie strony i tabeli.

CREATE TABLE T (Col1 INT PRIMARY KEY, XmlCol XML);
GO
-- Create primary XML index.
CREATE PRIMARY XML INDEX PIdx_T_XmlCol
ON T(XmlCol);
GO
-- Note the type 3 is index on XML type.
SELECT *
FROM sys.xml_indexes
WHERE object_id = object_id('T')
AND name='PIdx_T_XmlCol';

-- Modify and set an index option.
ALTER INDEX PIdx_T_XmlCol on T
SET (ALLOW_ROW_LOCKS = OFF);

Wyłączanie i włączanie indeksu XML

Domyślnie indeks XML jest włączony. Jeśli indeks XML jest wyłączony, zapytania uruchomione względem kolumny XML nie używają indeksu XML. Aby włączyć indeks XML, użyj ALTER INDEX z opcją REBUILD.

CREATE TABLE T (Col1 INT PRIMARY KEY, XmlCol XML);
GO
CREATE PRIMARY XML INDEX PIdx_T_XmlCol ON T(XmlCol);
GO
ALTER INDEX PIdx_T_XmlCol on T DISABLE;
GO

Użyj poniższego przykładu, aby sprawdzić, czy indeks jest wyłączony.

SELECT *
FROM sys.xml_indexes
WHERE object_id = object_id('T')
AND name='PIdx_T_XmlCol';
GO

Użyj poniższego przykładu, aby ponownie skompilować indeks.

ALTER INDEX PIdx_T_XmlCol on T REBUILD;
GO

Zobacz też