Влияние падения ПК на другие индексы - PullRequest
1 голос
/ 02 сентября 2011

Мне нужно обновить большое количество ключей в большой базе данных SQL Server 2005, и я буду сбрасывать FK и PK на несколько таблиц, выполнять обновление (которое заменяет значения PK / FK), а затем добавлять FK и PK снова.

Мои вопросы:

  1. Будет ли этот процесс влиять на существующие индексы, существующие в этих таблицах, либо индексы, включающие поля PK / FK или индексы других незатронутых полей. т.е. все ли индексы все еще существуют, потребуется ли их перестроение?

  2. Повлияет ли этот процесс на статистику таблицы, требующую пересчета?

Большое спасибо

Ответы [ 2 ]

1 голос
/ 02 сентября 2011

Если вы удалите PK (который обычно является кластерным индексом), SQL Server удалит и заново создаст все некластеризованные индексы (это необходимо, потому что, если у вас есть кластеризованный индекс, некластеризованные индексы указывают на кластеризованный индекс).Если у вас нет кластеризованного индекса (кучи), некластеризованные индексы указывают на строку данных

, перестройка кластерного индекса автоматически обновит статистику, реорг не будет

Если высоздала ключи с помощью cascade update, затем они должны обновляться автоматически

пример

create table pri(id int not null primary key)
go

create table ForeignK(fid int not null)
go


ALTER TABLE dbo.ForeignK ADD CONSTRAINT
    FK_ForeignK_pri FOREIGN KEY
    (fid) REFERENCES dbo.pri(id) ON UPDATE  CASCADE 
     ON DELETE  NO ACTION 

     insert pri values(1)
     insert ForeignK values(1)

теперь обновите таблицу PK

 update pri set id = 5
 go

теперь это будет также 5

 select * from ForeignK
0 голосов
/ 02 сентября 2011

Каждое изменение в индексированном столбце имеет распространение в изменении структуры.

Для внешнего ключа вы можете отключить их, а затем восстановить. Для закрытого ключа единственное, что вы можете сделать, это восстановить их. Я думаю, что SQLMenace объяснил это ясно почему.

Подробнее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...