自动编号主键与GUID主键详解

转载 2013年12月06日 09:31:12

自动编号主键与GUID主键详解    

自动编号主键  

      这种方法也是很多朋友在使用的,就是新建一个ID字段,自动增长,非常方便也满足主键的原则,优点是:数据库自动编号,速度快,而且是增量增长,聚集型主键按顺序存放,对于检索非常有利;数字型的,占用空间小,易排序,在程序中传递也方便;如果通过非系统增加记录(比如手动录入,或是用其他工具直接在表里插入新记录,或老系统数据导入)时,非常方便,不用担心主键重复问题。  

      缺点:其实缺点也就是来自其优点,就是因为自动增长,在手动要插入指定ID的记录时会显得麻烦,尤其是当系统与其他系统集成时,需要数据导入时,很难保证原系统的ID不发生主键冲突(前提是老系统也是数字型的);如果其他系统主键不是数字型那就麻烦更大了,会导致修改主键数据类型了,这也会导致其他相关表的修改,后果同样很严重;就算其他系统也是数字型的,在导入时,为了区分新老数据,可能想在老数据主键前统一加一个“o”(old)来表示这是老数据,那么自动增长的数字型又面临一个挑战。 

GUID主键  

    目前一个比较好的主键是采用GUID,当然我是推荐主键还是字符型的,但值由GUID生成,GUID是可以自动生成,也可以程序生成,而且键值不可能重复,可以解决系统集成问题,几个系统的GUID值导到一起时,也不会发生重复,就算有“o”老数据也可以区分,而且效率很高,在.NET里可以直接使用System.Guid.NewGuid()进行生成,在SQL里也可以使用 NewID()生成。

优点是:  

同 IDENTITY 列相比,uniqueidentifier 列可以通过 NewID() 函数提前得知新增加的行 ID,为应用程序的后续处理提供了很大方便。

便于数据库移植,其它数据库中并不一定具有 IDENTITY 列,而 Guid 列可以作为字符型列转换到其它数据库中,同时将应用程序中产生的 GUID 值存入数据库,它不会对原有数据带来影响。 

便于数据库初始化,如果应用程序要加载一些初始数据, IDENTITY 列的处理方式就比较麻烦,而 uniqueidentifier 列则无需任何处理,直接用 T-SQL 加载即可。 

便于对某些对象或常量进行永久标识,如类的 ClassID,对象的实例标识,UDDI 中的联系人、服务接口、tModel标识定义等。 

缺点是:  

GUID 值较长,不容易记忆和输入,而且这个值是随机、无顺序的  

GUID 的值有 16 个字节,与其它那些诸如 4 字节的整数相比要相对大一些。这意味着如果在数据库中使用 uniqueidentifier 键,可能会带来两方面的消极影响:存储空间增大;索引时间较慢。

收集几种生成顺序GUID的方法

 public static class Generator     {         [DllImport("rpcrt4.dll", SetLastError = true)]   ...
  • airingyuan
  • airingyuan
  • 2015年02月06日 14:27
  • 4442

SQL 自动GUID

默认值写这个就行 (newID()) 
  • lightningdelove
  • lightningdelove
  • 2007年04月11日 10:31
  • 619

数据库主键设计-用GUID还是Int(int32,int64)做主键(primaryKey)

数据库主键设计-用GUID还是Int(int32,int64)做主键(primaryKey) 使用INT做主键的优点:     1、需要很小的数据存储空间,仅仅需要4 byte 。     2、...
  • huwei2003
  • huwei2003
  • 2015年12月04日 18:21
  • 4709

你还在用GUID作数据库表的主键吗?

数据库的物理设计, 对于要负载很多用户的大系统来说, 是有关系统生与死的关键问题之一. 好的设计可能比差的设计在性能上有数量级的差别. 这不仅仅是省掉花在昂贵的数据库服务器软硬件上的钱的问题,  还是...
  • Kakrat
  • Kakrat
  • 2007年10月15日 18:46
  • 2721

自增主键和GUID主键

------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------         主键:主关键字(主键,primary key)是被挑选出来,作表的行...
  • qilangrsl
  • qilangrsl
  • 2012年07月27日 14:33
  • 1376

guid跟sequence做主键的比较

转自:http://spiritfrog.iteye.com/blog/245816 今天上班,发现一个同事用oracle的sys_guid()来做从一个表中随机获取6条记录: select * ...
  • dreamgis
  • dreamgis
  • 2013年10月22日 13:53
  • 1236

PRIMARY KEY主键和IDENTITY属性函数的区别

1 PRIMARY KEY 约束 表通常具有包含唯一标识表中每一行的值的一列或一组列。这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。在创建或修改表时,您可以通过定义 PRIMA...
  • fjseryi
  • fjseryi
  • 2013年09月28日 10:14
  • 2251

关于SQL主键GUID和Identity的看法

  • 2013年03月10日 23:03
  • 500KB
  • 下载

数据库主键用 int自增序列 还是 GUID

int自增序列 GUID性能测试 http://blog.csdn.net/fox123871/article/details/6578922测试结果表明在最常用的插入删除上, int主键的性能并没...
  • caib1109
  • caib1109
  • 2016年07月05日 16:03
  • 2802

使用Guid做主键和int做主键性能比较

在数据库的设计中我们常常用Guid或int来做主键,根据所学的知识一直感觉int做主键效率要高,但没有做仔细的测试无法说明道理。碰巧今天在数据库的优化过程中,遇到此问题,于是做了一下测试。 测试环境:...
  • fox123871
  • fox123871
  • 2011年07月01日 10:48
  • 11811
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自动编号主键与GUID主键详解
举报原因:
原因补充:

(最多只允许输入30个字)