none
【SQL】GUID和Identity做主键的具体区别是什么? RRS feed

  • 问题

  • 我也知道Identity主键会有一个极限。

    数据类型:int
    存储大小(字节): 4
    最小值 : -2,147,483,648(2G)
    最大值 : 2,147,483,647(2G-1)

    也有人说利用GUID作为主键。在网上查了下,id的性能会优于Guid,但如果以后的数据量非常大的时候,会不会导致id 爆掉。如果换成bigint呢?类似淘宝那样信息量大的网站,他们的主键设计又会是什么呢?


    买海参选煜诚 煜诚海参 真心品质 http://jinweb.taobao.com
    2010年11月23日 3:22

答案

  • Use bigint for large table. Guid may cause page split because values are not always in sequence like identity does. 
    • 已标记为答案 jinwb1982 2010年11月27日 1:54
    2010年11月23日 4:05
  • identity 是整武型类型就可以了, decimal不带小数的定义, bigint 均可

    guid 是固定的 binary(16), 也就是16个字节

    identity 是递增(或减), 而 guid 是随机的, 所以随着数据的插入, 前者不会产生什么碎片, 而后者会, 并且由于后者是无序的, 插入时还得调整顺序,所以性能上, 一般是前者优于后者.

    大量信息一般会分表, 所以identity在很多情况下还是比较适用的

    至于主键的意义, 这个看你设计时是怎么考虑的, 对于数据处理本身而言, 主键并不需要有意义, 而如果你要求主键中包含业务意义的话, 那么identity主键当然就是没意义的, 但一般来说, 业务意义和数据处理分开会更好一些, 业务始终是变化的, 如果你要把意义带到表设计的主键中, 那么业务变化, 你要调整的表结构也会比较多.

    • 已标记为答案 jinwb1982 2010年11月27日 1:54
    2010年11月25日 4:39

全部回复

  • Use bigint for large table. Guid may cause page split because values are not always in sequence like identity does. 
    • 已标记为答案 jinwb1982 2010年11月27日 1:54
    2010年11月23日 4:05
  • identity做主键有什么意义呢? 对于查询来说这样的主键浪费了
    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    2010年11月23日 6:45
    版主
  • 查询一个表没用,如果是查询Join 的表那就不一样了。

    2010年11月24日 3:53
    版主
  • identity做主键有什么意义呢? 对于查询来说这样的主键浪费了
    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    对于查询来说主键浪费了,对这个不是很理解,能说明下意思吗?谢谢!

    买海参选煜诚 煜诚海参 真心品质 http://jinweb.taobao.com
    2010年11月24日 9:12
  • 真心观摩学习。
    求上海地区英语好的SQL Server人才,onsite微软。 MSN:sunyismsn@hotmail.com
    2010年11月24日 9:20
  • 看来您应该好好看看数据库设计类的基础书籍,关于代理主键的
    2010年11月24日 14:30
  • identity 是整武型类型就可以了, decimal不带小数的定义, bigint 均可

    guid 是固定的 binary(16), 也就是16个字节

    identity 是递增(或减), 而 guid 是随机的, 所以随着数据的插入, 前者不会产生什么碎片, 而后者会, 并且由于后者是无序的, 插入时还得调整顺序,所以性能上, 一般是前者优于后者.

    大量信息一般会分表, 所以identity在很多情况下还是比较适用的

    至于主键的意义, 这个看你设计时是怎么考虑的, 对于数据处理本身而言, 主键并不需要有意义, 而如果你要求主键中包含业务意义的话, 那么identity主键当然就是没意义的, 但一般来说, 业务意义和数据处理分开会更好一些, 业务始终是变化的, 如果你要把意义带到表设计的主键中, 那么业务变化, 你要调整的表结构也会比较多.

    • 已标记为答案 jinwb1982 2010年11月27日 1:54
    2010年11月25日 4:39