自动编号主键与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 键,可能会带来两方面的消极影响:存储空间增大;索引时间较慢。

相关文章推荐

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

int自增序列 GUID性能测试 http://blog.csdn.net/fox123871/article/details/6578922测试结果表明在最常用的插入删除上, int主键的性能并没...

数据库中使用自增量字段与Guid字段作主键的性能对比

1.概述:   在我们的数据库设计中,数据库的主键是必不可少的,主键的设计对整个数据库的设计影响很大.我就对自动增量字段与Guid字段的性能作一下对比,欢迎大家讨论. 2.简介:  ...

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

数据库主键设计-用GUID还是Int(int32,int64)做主键(primaryKey) 使用INT做主键的优点:     1、需要很小的数据存储空间,仅仅需要4 byte 。     2、...

自增量字段与Guid字段主键的性能对比

数据库中使用自增量字段与Guid字段主键的性能对比 1.概述:   在我们的数据库设计中,数据库的主键是必不可少的,主键的设计对整个数据库的设计影响很大.我就对自动增量字段与Guid字段的性能作一...

.NET架构设计、框架设计系列文章总结

架构设计: ElasticSearch大数据分布式弹性搜索引擎使用 (推荐)DDD实施经验分享—价值导向、从上往下进行(圈内第一个吃螃蟹DDD实施方案)(推荐)软件工程—思考项目开发那些事(一)...

数据库中使用自增量字段与Guid字段主键对比

1.概述     在我们设计数据库时,数据库的表主键是必不可少的,主键的设计对整个数据库的设计影响很大。主键的设计主要有使用自动增长字段和使用Guid字段两种,上网搜了一些内容就对自动增量字...

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

在数据库的设计中我们常常用Guid或int来做主键,根据所学的知识一直感觉int做主键效率要高,但没有做仔细的测试无法说明道理。碰巧今天在数据库的优化过程中,遇到此问题,于是做了一下测试。 测试环境:...

数据库中自增量字段和Guid字段的比较

据库中使用自增量字段与Guid字段主键的性能对比 1.概述:   在我们的数据库设计中,数据库的主键是必不可少的,主键的设计对整个数据库的设计影响很大.我就对自动增量字段与Guid字段的性...

完成字符串拷贝(sprintf、strcpy 及 memcpy 函数)函数之间的区别

sprintf 可以进行额外的格式化 strcpy 会复制直到出现 '' 为止,可能溢出 strncpy 会复制一个以 '' 结束的字符串,但是如果字符串长度超过指定数量则被截断,但结果可能不包含...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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