Guid和Sequence做主键的比较
记得A项目组是一个物流管理系统,后台采用了Oracle数据库。在系统中的核心表托运单表中,关于主键采用何种数据类型,是 sequence 还是用GUID , 大家起了争论。
从网络搜索得到的结论看,一般的意见总结为:
1. SYS_GUID()比sequence复杂;
2.SYS_GUID做主键,则表、索引存储开销多;
3.SYS_GUID索引查询比sequence慢;
小结
从实践来看, 使用SYS_GUID() 做主键的优点多于负面影响。特别是在多个数据库数据集成时,GUID 的优点显而易见.
综上所述,SYS_GUID 做主键:
SYS_GUID 比sequence 复杂:有限范围的正确 :由于SYS_GUID 是RAW 类型的,做主键是,需要使用 RAWTOHEX 或者HEXTORAW 类的函数转换,若直接使用,则需要建立函数索引等。但这种复杂性往往在前端业务系统中体现不出,主键常常作为隐含的唯一ID 去标识对象,而不显示出来(或者不手工操作它,因为它无意义)。
SYS_GUID 做主键存储开销大:不需要评估系统规模:如今存储非常便宜,内存也足够大,如果2 千万条记录增加不到1.5G内存的话,当前普通的服务器已经可以承受,如果进行合理分区,则影响可以降低到极低。当然,如果您的服务器资源很紧张,那恐怕得放弃使用SYS_GUID
SYS_GUID 做主键查询比 sequence 慢 : 不正确:实践证明,二者是一样的。
【摘自:http://spiritfrog.iteye.com/blog/245816(更详细)】
Guid和Sequence做主键的比较的更多相关文章
- 使用Guid做主键和int做主键性能比较
使用Guid做主键和int做主键性能比较 在数据库的设计中我们常常用Guid或int来做主键,根据所学的知识一直感觉int做主键效率要高,但没有做仔细的测试无法 说明道理.碰巧今天在数据库的优化过程中 ...
- SQLSERVER如何使用递增排序的GUID做主键
场景: 产品表数据量较大想用Guid做表的主键,并在此字段上建立聚簇索引. 因为Guid是随机生成的,生成的值大小是不确定的,每次生成的数可能很大,也可能很小.这样会影响插入的效率 1.NEWSEQU ...
- SQL GUID和自增列做主键的优缺点
我们公司的数据库全部是使用GUID做主键的,很多人习惯使用int做主键.所以呢,这里总结一下,将两种数据类型做主键进行一个比较. 使用INT做主键的优点: 1.需要很小的数据存储空间,仅仅需要4 by ...
- GUID做主键真的合适吗
在一个分布式环境中,我们习惯使用GUID做主键,来保证全局唯一,然后,GUID做主键真的合适吗? 其实GUID做主键本身没有问题,微软的很多项目自带DB都是使用GUID做主键的,显然,这样做是没有问题 ...
- int 和guid做主键的时候性能的区别
1.在经常需要做数据迁移的系统中,建议用Guid.并且在相应的外键字段,也就是用来做连接查询的字段添加非聚集索引,对于改善性能有极大的好处.where条件的字段也可以适当添加非聚集索引. 2.在使用G ...
- 扩展ASP.NET Identity使用Int做主键
当我们默认新建一个ASP.NET MVC项目的时候,使用的身份认证系统是ASP.NET Identity.但是这里的Identity使用的主键为String类型的GUID.当然这是大多数系统首先类型. ...
- [MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键
我们先了解下InnoDB引擎表的一些关键特征: InnoDB引擎表是基于B+树的索引组织表(IOT): 每个表都需要有一个聚集索引(clustered index): 所有的行记录都存储在B+树的叶子 ...
- (转)mysql中InnoDB表为什么要建议用自增列做主键
InnoDB引擎表的特点 1.InnoDB引擎表是基于B+树的索引组织表(IOT) 关于B+树 (图片来源于网上) B+ 树的特点: (1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关 ...
- InnoDB表要建议用自增列做主键
InnoDB引擎表是基于B+树的索引组织表(IOT): 每个表都需要有一个聚集索引(clustered index): 所有的行记录都存储在B+树的叶子节点(leaf pages of the tre ...
随机推荐
- ant学习简单例子
1.下载ant,http://ant.apache.org/ 这个网站下载,然后配置环境变量 打开dos界面,输入ant -version,如果提示命令不存在,进入到ant包装目录bin下载,再次运行 ...
- Android studio下gradle Robolectric单元测试配置
android studio下gradle Robolectric单元测试配置 1.Robolectric Robolectric是一个基于junit之上的单元测试框架.它并不依赖于Android提供 ...
- SpringMVC流程
Spring工作流程描述 1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获: 2. DispatcherServlet对请求URL进行解析 ...
- Could not load file or assembly or one of its dependencies. 试图加载格式不正确的程序。
当我把编译好的程序托管到IIS下后,访问时出现了以下问题,服务器环境是IIS 7,操作系统 Windows server 2008 r2 64位. 出现上述问题的原因是,所加载的程序集中有32位的,也 ...
- django orm总结[转载]
django orm总结[转载] 转载地址: http://www.cnblogs.com/linjiqin/archive/2014/07/01/3817954.html 目录1.1.1 生成查询1 ...
- PHP是什么
php 是一种服务器端的,嵌入html的脚本语言.php区别其他像客户端java的地方是它的代码在服务器端执行.php能做什么? 最低水平,php可以做任何其他cgi程序所能做的事,例如收集表格数据, ...
- moffiestyle
听说 moffie是 带着胭脂粉气息的男人 为什么用这个名字 因为 我觉得 男生 最美 在 浓妆妖艳的时候 据说 南北朝 是 流行 男人化妆的 ...
- 《AngularJS权威教程》中关于指令双向数据绑定的理解
在<AngularJS权威教程>中,自定义指令和DOM双向数据绑定有一个在线demo,网址:http://jsbin.com/IteNita/1/edit?html,js,output,具 ...
- android 打包失败
如果在打包时提示: proguard returned with error code 1 并且在控制台中输出:'java'不是内部或外部程序或批处理文件 那么就说明你的环境变量出问题了,之前用的 ...
- MicroERP软件更新记录1.0
版本号:1.0.256 本次: 1\修复了选择货位时的BUG; 2\增加了物品资料由EXCEL表批量导入的功能; 3\物品资料增加了三个自定义属性; 4\优化了科目汇总账(余额表)算法; 5\应大家建 ...