Что случится, если отключить кластеризованный индекс?
Пересказ статьи Kenneth Fisher. What happens if I disable the clustered index?
Вы, вероятно, уже знаете, что индекс можно отключить. Это может быть удобно при большой загрузке, а загрузка + включение индексов (вы должны будете полностью перестроить их) быстрей, чем загрузка при включенных индексах. Я знаю мало случаев, когда это помогало, но иногда это может оказаться удобным трюком. Следует сказать, что это справедливо только для некластеризованных индексов. А что случится, если отключить кластеризованный индекс?
CREATE TABLE DisableMe (
Id INT,
Col1 varchar(50),
INDEX ci_DisableMe CLUSTERED (Id)
);
INSERT INTO DisableMe VALUES
(1,'One')
,(2,'Two')
,(3,'Three');
GO
SELECT FROM DisableMe;
GO
ALTER INDEX ci_DisableMe ON DisableMe DISABLE;
GO
SELECT FROM DisableMe;
GO
Msg 8655, Level 16, State 1, Line 20
Обработчику запросов не удалось предоставить план,
потому что индекс "ci_DisableMe" таблицы или представления "DisableMe" отключен.
Все правильно, так? Я имею в виду, что кластеризованный индекс - это и есть таблица, поэтому если отключить индекс, то и выполнять чтение неоткуда. Кроме того, просто чтобы вы знали, действие отключения кластеризованного индекса отключит все некластеризованные индексы, и их нельзя будет снова включить, пока не будет включен/перестроен CI (кластеризованный индекс). Опять же нет данных, чтобы перестроить некластеризованный индекс. И единственный способ повторно включить кластеризованный индекс - это перестроить его (т.е. снова сделать доступной таблицу).
ALTER INDEX ci_DisableMe ON DisableMe REBUILD;
GO
SELECT * FROM DisableMe;
GO
Тем не менее, у вас есть возможность полностью удалить CI. Вы получаете кучу, но, по крайней мере, у вас остается доступ к данным.
DROP INDEX DisableMe.ci_DisableMe;
GO
Обратные ссылки
Автор не разрешил комментировать эту запись
Комментарии
Показывать комментарии Как список | Древовидной структурой