当前位置: 代码迷 >> Sql Server >> 关于复合主键跟自增长主键设计 以及 增删改 性能 讨论
  详细解决方案

关于复合主键跟自增长主键设计 以及 增删改 性能 讨论

热度:518   发布时间:2016-04-24 10:06:21.0
关于复合主键和自增长主键设计 以及 增删改 性能 讨论
在数据库设计的时候有2 种方式:

tba(FID int, RID int, 。。。。。,primary key(FID,RID)


tba(Id int identity(1,1) primary, FID int, RID int,。。。。。,unqiue key(FID,RID)

业务场景:
对表的 新增加 修改 删除 比例大致是 45%,45%,10% ,
对于新增加的 可能是无序的,例如 当前的FID是100, 可能新增加的是 FID=10,FID=1 等
对于修改的 不会修改FID RID 2字段,只是修改其他字段。

疑问:
如果按照方式一设计,主键即是聚集索引,聚集索引在物理上是有序存放的,可以提高读取效率, 对于无序的新增加,和删除 岂不是要移动非常多的位置,影响插入性能 ?   
对于无序和有序插入,索引结构是怎么变化的?

------解决方案--------------------
增删改的确会引起聚集索引键的改动,进而引起所有非聚集索引的改动,如果频繁修改FID,那么用第二钟方案会相对影响面较小
------解决方案--------------------
聚集索引的有序存放并不是紧密相邻的,存放数据的分页是可以有空白位置的。
删除:只是标记为不可查询,无需移动数据。
插入:如果页中没满,最多在该页中调整位置;如果满了,就分页,又可以按照没满的方式处理。
虽然性能没有方案二高,但是移动的量没有你想象的那么高。
只有在备份后压缩数据库,才有可能大量移动数据。

如果删除、更新都是用 FID,RID 做条件,选第一方案(和1楼一个意思)。
  相关解决方案