手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:guid

又见使用Guid做主键和int做主键性能比较的文章

关于使用GUID和INT做主键,性能差异的文章历来很多,不过。大多都是从理论上来说明,这次难得看到某人用PC机做测试,所以贴上来看看。但我不贴全文,毕竟。。。大量的代码贴上来,也没有太大的意义 。所以仅贴上主体内容和测试结果,当然还会有一些用户的评论。。

原文网址为:http://www.cnblogs.com/jackhuclan/archive/2010/01/04/1639005.html
内容大致如下,【如想看全文,请使用上面的链接】
在数据库的设计中我们常常用Guid或int来做主键,根据所学的知识一直感觉int做主键效率要高,但没有做仔细的测试无法说明道理。碰巧今天在数据库的优化过程中,遇到此问题,于是做了一下测试。

 

测试环境:

  台式电脑 Pentiun(R) 4 Cpu 3.06GHz
Win XP professional
1.5G DDR RAM
SQL Server 2005 个人版 

测试过程:
首先创建测试数据库Test
1.创建Test_Guid表,创建Test_Int表
2.创建Test_Guid子表:Test_Guid_Detail和创建Test_Int子表:Test_Int_Detail,用来做连接查询
3、然后进行一些CRUD的操作【这是我写的,因为原文中写插入N行数据,删除N行数据之类的太复杂,也太多,简化为一句话了】

测试结果如下
大小: 50.14 K
尺寸: 326 x 376
浏览: 1891 次
点击打开新窗口浏览全图

综上所述,使用int做主键比用guid做主键各中情况下效率均有提高,特别是在有连接查询和删除记录效率提升明显。

而且本人今日在guid做主键的数据查询中因为嵌套几个子查询结果屡屡出现查询超时。因此本人赞同用int做主键,不赞同guid做主键。
以上观点代表个人观点,欢迎大家各抒己见,说明guid和int各自做主键的优劣所在。

----EOF---

本来到这里就可以结束了,但有一个用户的评论还算不错:

徐少侠
  1. 首先  
  2. 10万行不算大数据量  
  3. 我测试插入操作的时候是1600万行。性能约有10-20%的差异  
  4. 当然,10万行也能说明一些问题了  
  5.   
  6. 其次,请在所有的where和on条件中使用到的列身上增加一个索引  
  7. 也就是说所有的外键都要有索引,非唯一索引  
  8. 具体说,就是主表的TestId以及子表对应的外键列  
  9.   
  10. 然后再重新执行一下上述测试  
  11. 主要对带where和inner join的测试表示疑问  
  12.   
  13. 最后,int在多数情况下一定比Guid快,这是不用怀疑的。  
  14. 同时,查询优化主要靠索引,以及对索引树的优化以及查询顺序的安排  
  15. 主键的数据类型一般只影响到插入操作的速度  
  16. 对于查询操作的影响是比较小的  
  17. 不至于出现50%左右的性能差异  

更多的人认为GUID在做数据迁移的时候很方便,而如果使用INT则会有意料不到的问题。而GUID遇到的问题会少很多。。。

相对于以上的观点我还是比较认同的,但我认为性能相差这么大是有可能有以下的原因:
1、作者用的是PC机
2、操作系统是XP
3、sql server 是个人版【我没有试用服务器版性能如何,但我想,一定比个人版性能更优,当然这是猜测】

说归说,对于MYSQL来说,基本上还是只能使用INT做主键。毕竟MYSQL没有自带的生成GUID的方法【我不是指手动生成,我是说自动生成。。。UUID()函数是可以生成GUID的,但不能象INT那样自动插入,也没有办法设置default为UUID()方法】

Tags: guid, int