我看有很多人设计的数据库,明明有不重复的列 比如ID号码这种,
但还是要新建一个自增长列当主键,请问这样做有什么好处吗,还是说自增长列查询比较快?

解决方案 »

  1.   

    个人觉得有3点:
    #1.当记录有顺序或查询时有可能依赖顺序的时候,会比较有用。
    #2.自增,且回滚不会撤销。如果产生断号,可以容易定位到异常的记录。
    #3.最重的原因,我想就是因为聚集索引。如果一个表没有合适的聚集索引(建议每个表都建立聚集索引),就用一个自增列做主键(同时也是聚集索引),这样每次插入的记录都会在聚集索引的最后,减少了索引碎片。而用其它字段做聚集索引,可能会由于INSERT,UPDATE造成一定的索引碎片。
    #4.当然,像你说的这种情况,完全可以用ID字段来做主键。如果数据量和主键字段修改量不大,没完没有什么问题。
      

  2.   

    ID一般是字符串,可能较长
    自动递增id,一般是4字节整数,索引开销低、定位快另外,用户可见的ID,说唯一、不变,其实都靠不住的:领导一句话大过天
      

  3.   

    这句强烈同意!!!
    我们写的自己用的,类似ERP的系统,物料编号是主键,很多地方都用这个来做连接。
    上个月,领导说要改物料编号的值。
    我说是主键,没法改。
    领导就说了,为什么不用数字来做主键,来和其他的表连接。这样,物料编号不就可以改了。
    我无语………………
      

  4.   

    这句强烈同意!!!
    我们写的自己用的,类似ERP的系统,物料编号是主键,很多地方都用这个来做连接。
    上个月,领导说要改物料编号的值。
    我说是主键,没法改。
    领导就说了,为什么不用数字来做主键,来和其他的表连接。这样,物料编号不就可以改了。
    我无语………………
      

  5.   

    自增长列有个弊病就是当删除的时候容易产生断号,为了让ID能充分利用,那么就可以自己搞个ID列,然后通过程序控制,可以在断号之间插入ID