Modyfikowanie indeksów XML
Dotyczy:SQL Server
Azure SQL Database
Azure 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