我需要更新大型SQL Server 2005數據庫中的大量密鑰,並且會將FK和PK放在一堆表上,執行更新(它將替換PK的值/ FK),然後再次添加FK和PK。將PK放在其他索引上的效果
我的問題是:
將這一過程對exsiting在這些表中存在索引任何影響,無論是 指標包括對其他領域的影響的PK/FK字段或索引。即所有的索引是否仍然存在,他們是否需要重建?
此過程是否會影響表統計信息,需要重新計算?
非常感謝
我需要更新大型SQL Server 2005數據庫中的大量密鑰,並且會將FK和PK放在一堆表上,執行更新(它將替換PK的值/ FK),然後再次添加FK和PK。將PK放在其他索引上的效果
我的問題是:
將這一過程對exsiting在這些表中存在索引任何影響,無論是 指標包括對其他領域的影響的PK/FK字段或索引。即所有的索引是否仍然存在,他們是否需要重建?
此過程是否會影響表統計信息,需要重新計算?
非常感謝
如果你把一個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
VASH,是不是在結構上傳播改變了你提到的只有在更改聚集索引的情況下發生? –
否。索引通常構造爲B-Tree。索引的節點表示硬盤上的行的物理地址,在PK節點地址已經是行地址的情況下,所以不需要再做一次跳轉。 –