我需要更新大型SQL Server 2005数据库中的大量密钥,并在一堆表上删除FK和PK,执行更新(替换PK / FK的值)然后添加FK和PK再次。
我的问题是:
此过程是否会对这些表中存在的索引产生任何影响 包含PK / FK字段或其他未受影响字段的索引的索引。即所有索引是否仍然存在,是否需要重建?
此过程是否会影响表统计信息,需要重新计算?
非常感谢
答案 0 :(得分:1)
如果删除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
答案 1 :(得分:0)