При отбрасывании ограничения будут ли удаляться вспомогательные индексы? - PullRequest
6 голосов
/ 18 февраля 2010

Я пытаюсь запомнить некоторый синтаксис sql, и я получил синтаксис ALTER TABLE ADD CONSTRAINT.Я считаю, что я прав, когда говорю, что когда вы используете этот синтаксис для добавления ограничения FOREIGN KEY или PRIMARY KEY, этот sql-сервер автоматически создает индексы для поддержки операций ограничения.(Это правда ... или это правда только на PK, но не на FK?)

Если так, то при использовании синтаксиса ALTER TABLE DROP CONSTRAINT ... автоматически удаляются также вспомогательные индексы?Можно ли явно отбросить эти неявные вспомогательные индексы?Если так, то CONSTRAINT автоматически удаляется?

Я просто хочу узнать, как это работает "под прикрытием".Гугл не помог.Я полагаю, что мог бы запросить некоторые системные таблицы, чтобы узнать правду, но подумал, что попробую вместо этого.

Спасибо за вашу помощь.

Сет

Ответы [ 4 ]

2 голосов
/ 19 февраля 2010

Когда вы добавляете первичный ключ, фактически добавляется уникальный индекс.От того, было ли это добавление вызвано кластеризацией нового индекса, зависит, указали ли вы, что он не кластеризован или нет.Если при добавлении ограничения первичного ключа вы не укажете, является ли оно кластеризованным или некластеризованным, оно будет кластеризовано, если кластеризованное ограничение или индекс еще не существует в таблице, в противном случае оно будет некластеризованным.

Когда вы добавляете внешний ключ, индекс не создается автоматически.

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

Индексы, созданные в результате создания ограничения, нельзя удалить с помощью DROP INDEX.

2 голосов
/ 18 февраля 2010

FK не получают индекс автоматически в SQL Server, если вам нужен индекс, его нужно добавить! При отбрасывании FK вы не удаляете индекс, вам нужно удалить сам индекс.

2 голосов
/ 18 февраля 2010

Индекс, обеспечивающий ограничение UNIQUE, будет удален, один индекс, поддерживающий ограничение FK, не будет удален автоматически. Он также не будет создан автоматически.

2 голосов
/ 18 февраля 2010

Ограничение первичного ключа добавит кластеризованный индекс в таблицу, если он еще не существует, в противном случае для него будет создан уникальный некластерный индекс.

Удаление ограничения первичного ключа также приведет к удалению базового индекса.

Ограничение внешнего ключа не добавит индекс.

Удаление ограничения внешнего ключа не повлияет на индекс.

Внешние ключи не имеют ничего общего с индексами.

...