2011-09-01 53 views
1

我需要更新大型SQL Server 2005數據庫中的大量密鑰,並且會將FK和PK放在一堆表上,執行更新(它將替換PK的值/ FK),然後再次添加FK和PK。將PK放在其他索引上的效果

我的問題是:

  1. 將這一過程對exsiting在這些表中存在索引任何影響,無論是 指標包括對其他領域的影響的PK/FK字段或索引。即所有的索引是否仍然存在,他們是否需要重建?

  2. 此過程是否會影響表統計信息,需要重新計算?

非常感謝

回答

1

如果你把一個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 
0

索引列的每個變化具有結構變化的傳播。

對於外鍵,您可以禁用它們然後重新生成。只有私鑰才能做的是​​重建它們。我認爲SQLMenace很清楚地解釋了原因。

More

+0

VASH,是不是在結構上傳播改變了你提到的只有在更改聚集索引的情況下發生? –

+0

否。索引通常構造爲B-Tree。索引的節點表示硬盤上的行的物理地址,在PK節點地址已經是行地址的情況下,所以不需要再做一次跳轉。 –

相關問題