当前位置: 代码迷 >> Sql Server >> 关于主键跟聚集索引设计
  详细解决方案

关于主键跟聚集索引设计

热度:39   发布时间:2016-04-24 10:07:11.0
关于主键和聚集索引设计
主要功能是把一个execel 文件里面数据保存到数据库,现在主键设计是FID+NID,
FID,一个excel文件代表一个FID,id 从1 开始顺序增加。
NID, 一个execel文件里面有多行,最多只有200, id 从 1 增加到200
一起大概有500w 个 execel 文件,所有这个表大概有10亿的数据。

业务操作:
对于新的文件,产生新的FID+NID直接操作数据库。
对于修改文件,这里修改文件并不一定是顺序,例如当前的FID是10000,可能修改FID为10的记录,分 新增加,删除,修改,这里修改不会修改FID+NID这2字段值,只是修改其他字段。 删除15%,新增加15,修改70%.
这个表主键不会当其他表的外键,所以采用了复合主键方式。
现在有下面3个问题:

1 是用一个自增长做主键和聚集索引 还是 用 现在复合主键 ?
2 如果是复合主键,这个聚集索引是建在FID+NID上,还是单独的FID ? FID可能是从1到500w, NID 可能是1到200, 我个人倾向是建在单独的FID上。
3 对于新文件插入(顺序FID) 和  对于 修改文件里面新增加插入(当前FID10000,修改FID10的文件,那新插的FID+NID 可能是 10,100;10,101 。。。)。 这时候聚集索引是怎么移动的? 聚集索引在物理上是连续存储的,对于修改里面的新增加的情况,肯定会造成聚集索引分裂,移动数据。 不知道这个是怎么影响的?
------解决方案--------------------
简单看了下 我还是觉得直接用自增列做主键就可以了。
------解决方案--------------------
FID,一个excel文件代表一个FID,id 从1 开始顺序增加。
NID, 一个execel文件里面有多行,最多只有200, id 从 1 增加到200
一起大概有500w 个 execel 文件,所有这个表大概有10亿的数据。


可以这样:
ID(Bigint identity primary key),  FID(int),  NID(int),...

FID 和NID可以創建一個唯一約束 .

  相关解决方案