Sql server 降低PK对其他指标的影响

Sql server 降低PK对其他指标的影响,sql-server,tsql,statistics,key,indexing,Sql Server,Tsql,Statistics,Key,Indexing,我需要更新大型SQL Server 2005数据库中的大量密钥,并将在一组表上删除FKs和PK,执行更新(替换PK/FK的值),然后再次添加FK和PK 我的问题是: 这个过程是否会对这些表上现有的索引产生任何影响 包含PK/FK字段或其他未受影响字段上的索引的索引。ie所有索引是否仍然存在,是否需要重建 此过程是否会影响表统计信息,需要重新确认 非常感谢如果您删除PK(通常是聚集索引),SQL Server将删除并重新创建所有非聚集索引(这是必需的,因为如果您有聚集索引,非聚集索引将指向聚集索引

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

我的问题是:

  • 这个过程是否会对这些表上现有的索引产生任何影响 包含PK/FK字段或其他未受影响字段上的索引的索引。ie所有索引是否仍然存在,是否需要重建

  • 此过程是否会影响表统计信息,需要重新确认

  • 非常感谢

    如果您删除PK(通常是聚集索引),SQL Server将删除并重新创建所有非聚集索引(这是必需的,因为如果您有聚集索引,非聚集索引将指向聚集索引)。如果没有聚集索引(堆),则非聚集索引指向数据行

    重建聚集索引将自动更新统计信息,而reorg则不会

    如果使用
    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
    
    如果删除PK(通常是聚集索引),SQL Server将删除并重新创建所有非聚集索引(这是必需的,因为如果有聚集索引,非聚集索引将指向聚集索引)。如果没有聚集索引(堆),则非聚集索引指向数据行

    重建聚集索引将自动更新统计信息,而reorg则不会

    如果使用
    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
    

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

    对于外键,可以禁用它们,然后重新生成。对于私钥,您唯一能做的就是重建它们。我认为SqlNemage清楚地解释了原因


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

    对于外键,可以禁用它们,然后重新生成。对于私钥,您唯一能做的就是重建它们。我认为SqlNemage清楚地解释了原因


    Vash,您提到的结构变化中的传播不是只有在聚集索引发生变化时才会发生吗?不是。索引通常构造为B树。索引的节点表示硬盘上行的物理地址,如果PK,节点地址已经是行地址,因此不需要再跳一次。Vash,你提到的结构变化的传播不是只有在聚集索引发生变化的情况下才会发生吗?不是。索引通常被构造为B树。索引的节点表示硬盘上行的物理地址,如果PK,则节点地址已经是行地址,因此无需再次跳转。