降低PK对其他指标的影响

时间:2011-09-01 23:14:07

标签: sql-server tsql statistics key indexing

我需要更新大型SQL Server 2005数据库中的大量密钥,并在一堆表上删除FK和PK,执行更新(替换PK / FK的值)然后添加FK和PK再次。

我的问题是:

  1. 此过程是否会对这些表中存在的索引产生任何影响 包含PK / FK字段或其他未受影响字段的索引的索引。即所有索引是否仍然存在,是否需要重建?

  2. 此过程是否会影响表统计信息,需要重新计算?

  3. 非常感谢

2 个答案:

答案 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)

索引列中的每个更改都会在结构更改中传播。

对于外键,您可以禁用它们然后重建。对于私钥,您唯一能做的就是重建它们。我认为SQLMenace明确解释了原因。

More