博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于侯垒的自增字段和GUID字段性能对比文章的一些自己的分析(没有测试,纯粹分析)...
阅读量:5773 次
发布时间:2019-06-18

本文共 708 字,大约阅读时间需要 2 分钟。

一上午都在忙着面试,闲暇看到侯垒的文章, ,我觉得他为一个很小的细节作出这么多的测试,实在是佩服,但是基于我自己的一些知识,可能有些东西不是很认可。
mssql的int自增是4字节,GUID是4个4字节,根据mac地址产生分有序列和无序列,有序列即产生的GUID自增,无序列产生的GUID随机大小。仅凭这一点,在mssql在构造B树的时候,一个8KB的索引页能存储的int索引是GUID的四倍,也就是说采用GUID的索引树IO大小是int类型索引的4倍,这个是理论值,还存在页间裂缝碎片等,比理论值还要高。可以想象一个测试案例:一棵聚集B树,1000w的id,如果是int那么粗略估计是使用1000w×4/8000=5000个叶级页面,如果是GUID是1000w×16/8000=2w个页级页面,如果是fullscan,那么IO就很容易对比出来哪个速度快。如果是lookup,树的高度肯定也是GUID的高,但是IO优势体现不明显,除非大量的lookup。另外,如果是类似id>1000,那性能差距更夸张,不过似乎采用GUID的话,就不好比大小了。不过有个应用场景对GUID是致命的,也就是经常的应用场景需要用ID去跟其他表关联查找,这个时候,性能的差异就完全暴露,但是侯磊在测试中完全没有顾及。如果是关联查找,无论哪个表作为内表,其关联字段都需要做排序索引,如果没有排序,那么就需要先在内存中排序,或者使用hashjoin,但是这个方式是非常耗费CPU的,所以大小表的关联最佳采用是嵌套,综上,使用GUID在各个应用场景上都与int类型没有什么优势可言,希望大家啊探讨,或者写个测试脚本试试,看看执行计划和IO对比。

转载地址:http://xjaux.baihongyu.com/

你可能感兴趣的文章
Jquery操作radio,checkbox,select表单操作实现代码
查看>>
iOS崩溃前日志记录实现
查看>>
对象赋值,对象拷贝
查看>>
elasticsearch存储空间不足导致索引只读,不能创建
查看>>
DOS命令大全
查看>>
C#中运算符的使用
查看>>
JavaScript设计模式之策略模式
查看>>
[学]《Python 核心编程》学习笔记(三)
查看>>
js各种继承方式和优缺点介绍
查看>>
双非本科非科班海投300+家Java后台岗位(个人心得感悟,附赠面试参考资料)...
查看>>
c语言基础5
查看>>
oracle11g客户端配置及使用(Windows系统)
查看>>
C/C++易错小记录
查看>>
正则表达式
查看>>
17.Node.js 回调函数--异步编程
查看>>
数据库几种Top子句的使用方法
查看>>
关于线程池
查看>>
UPS故障案例集(二)
查看>>
Excel 2010 如何在Excel的单元格中加入下拉选项
查看>>
python3的soker模块实现功能
查看>>