Что происходит, когда я отбрасываю кластерный первичный ключ в SQL 2005

У меня есть ограничение PK - кластерный индекс по двум столбцам, который я сейчас удаляю. Команда все еще работает через час. Я бы подумал, что, поскольку я просто снимаю ограничение, операция будет почти мгновенной. Может ли кто-нибудь объяснить мне, что на самом деле происходит под капотом, когда я роняю ПК?


person Mr. Flibble    schedule 01.04.2009    source источник


Ответы (3)


Кластерный индекс - это не «просто ограничение», это метод хранения.

Когда вы его отбрасываете, ваши данные переупорядочиваются из кластерного хранилища в хранилище в куче.

Другие индексы обновляются для ссылки на значения RID вместо PRIMARY KEY.

person Quassnoi    schedule 01.04.2009

Кластерный индекс - это данные, которые объясняют время, необходимое для выполнения.

person Otávio Décio    schedule 01.04.2009
comment
Не могли бы вы расширить, пожалуйста? Удаление ограничения pk кластеризованного индекса не приводит к удалению самих данных (по крайней мере, у меня проблемы, если это произойдет). Вы имеете в виду, что данные переупорядочиваются? - person Mr. Flibble; 01.04.2009
comment
Кластерный индекс определяет физическое расположение данных. Когда вы его уроните, данные будут переставлены - но не удалены, не беспокойтесь об этом. - person Otávio Décio; 01.04.2009
comment
В порядке. Так зачем его переставлять? Если я не укажу заказ, почему он будет создавать свой собственный? - person Mr. Flibble; 01.04.2009
comment
Кстати, вот почему обычно использование PK в качестве кластерного индекса является пустой тратой, когда иногда у вас есть лучшие кандидаты (например, даты, которые могут использоваться в диапазоне quereis). - person Otávio Décio; 01.04.2009
comment
На самом деле это хороший вопрос, каков порядок данных по умолчанию для таблиц, не имеющих кластеризованных индексов. Этого я не знаю, я проверю свою книгу "Внутренности", чтобы узнать, смогу ли я узнать. - person Otávio Décio; 01.04.2009
comment
По умолчанию добавление продолжается по порядку. SQL Server выбирает кластеризацию PK по умолчанию, потому что 3 идет после 2, что идет после 1. Когда вы ВСТАВЛЯЕТЕ новую строку, ее легко записать по порядку. Если вы, например, сгруппируете UNIQUEID, вы можете переформатировать свой жесткий диск на каждой вставке :) - person Timothy Khouri; 01.04.2009
comment
Если по умолчанию добавлять его в том же порядке, что и при кластеризованном индексе, кажется маловероятным, что он будет беспокоить переупорядочение таблицы ... Спасибо за все ваши комментарии. Я отменил операцию сейчас в надежде, что есть лучший способ изменить индексы вместо удаления старых / добавления новых - person Mr. Flibble; 01.04.2009
comment
Через минуту я опубликую новый вопрос о том, как это сделать, и добавлю сюда ссылку. - person Mr. Flibble; 01.04.2009
comment
Я опубликовал более подробную информацию о моей проблеме, если кто-то захочет взглянуть: stackoverflow.com/questions/705790/ - person Mr. Flibble; 01.04.2009

«КЛАСТЕРИРОВАННЫЙ» индекс физически записывает записи вашей таблицы по порядку на жесткий диск. Таким образом, удаление или изменение этого индекса, скорее всего, приведет к тому, что SQL Server в основном «дефрагментирует» (переупорядочивает) ваш жесткий диск (ну, по крайней мере, ту часть, где находятся данные для этой таблицы).

Обратите внимание, что этот ответ не совсем технический ... но он предназначен для того, чтобы дать вам ответ «о, это вроде как происходит», который обычно более чем достаточно хорош.

person Timothy Khouri    schedule 01.04.2009