关于通过聚集索引以及堆来对比数据表组织结构-SQLServer最优实践 的一点看法
来源:互联网 发布:amd显卡游戏优化不好 编辑:程序博客网 时间:2024/06/06 05:25
本文主要测试聚集索引表和堆表的插入、删除、更新、查询以及并发情况下的查询效率
在单用户插入、删除、更新、查询的情况下,聚集索引表的效率要优于堆表
这是因为在插入、删除、更新操作时,聚集索引表的读写操作只有一次,而堆表的读写操作则分别为两次,即需要维护索引数据和表数据。
再插入时Page splits/sec的指标,聚集索引表远远高于堆表,这是在插入数据时,由于数据是按照聚集索引列进行组织的,所以聚集索引表的叶子/非叶子节点的分裂远远高于堆表。
聚集索引表情况下Page splits/sec=Pages Allocated/sec,即分裂的速度也即重新分配的速度
而堆表情况下Pages Allocated/sec要大于聚集索引表,这是因为堆表页面的无序性造成的,必须每次从IAM页中进行分配,而聚集索引表则可以通过双向链表来查找。
Pages Allocated/sec为SQL Server 实例的所有数据库中每秒分配的页数。这些页包括从混合区和统一区中分配的页。
对于查询而言,聚集索引当然是最快的选择了,堆表则需要进行两次查找。更新和删除操作的情况与其类似。
在并发情况下,数据的插入效率,堆表则好于聚集索引表,主要体现在Page splits/sec和page latch waits per second这两个指标上,page latch waits per second可以理解为对页面的争用等待数,因为聚集索引的数据组织的排序性,比如要对热点页面发生相应的争用,而堆表则不存在该问题。
综上,一般情况下,聚集索引表的性能要优于堆表。
但该测试也存在一定的问题,测试数据的有序性无法论证,索引列数据的有序性对插入以及空间利用率都有很大的关系,同时也会影响后续的更新、删除操作的测试。
其次是表的列宽太小,并且初始索引填充因子皆为0,对于更新、删除操作的测试也没有太大意义,因为更新的列宽没有发生变化,对页面的分裂和空间利用率不产生任何影响
- 关于通过聚集索引以及堆来对比数据表组织结构-SQLServer最优实践 的一点看法
- Sql Server中的表组织和索引组织(聚集索引结构,非聚集索引结构,堆结构)
- Sql Server中的表组织和索引组织(聚集索引结构,非聚集索引结构,堆结构)
- SQLSERVER的非聚集索引结构
- Mysql聚集索引和非聚集索引(堆组织表和索引组织表)
- SQLServer——聚集索引结构
- SQLServer——非聚集索引结构
- 使用NEWSEQUENTIALID解决GUID聚集索引问题 SQLServer数据表主键的另一个方案
- SQLServer的聚集索引和非聚集索引
- SQLServer的聚集索引和非聚集索引
- 索引组织表(IOT)和堆组织表的性能对比测试
- 聚集索引与非聚集索引的结构与使用
- SQLSERVER聚集索引和主键的误区
- SqlServer查看聚集索引的创建时间
- 关于聚集索引的问题
- 关于sql的聚集索引
- 关于mysql的聚集索引
- 对比特币的一点看法
- 『phphot』【SD2.0大会】CodeGear RAD Studio 2007 性能全览
- TFS安装指南
- 『max_yuki』【SD2.0大会】微软MVP郭安定:编程无所不在
- 唯一一个看懂《山楂树之恋》的人,太震惊了,内涵很深
- ARIES
- 关于通过聚集索引以及堆来对比数据表组织结构-SQLServer最优实践 的一点看法
- 老鸟对菜鸟的一些建议 (转)
- TABLE JAVASCRIPT
- iText模板应用问题
- vc6.0 /mfc中的错误:see declaration of 'AFX_MSGMAP 、GetMessageMap 、syntax error : missing '; ' before '* '
- 解决vss Access to file"//***/rights.dat" denied
- msp430液晶驱动模块
- 可穿戴产品
- 学习笔记之------------QThread使用方法。