关于通过聚集索引以及堆来对比数据表组织结构-SQLServer最优实践 的一点看法

简介:
本文主要测试聚集索引表和堆表的插入、删除、更新、查询以及并发情况下的查询效率
在单用户插入、删除、更新、查询的情况下,聚集索引表的效率要优于堆表
这是因为在插入、删除、更新操作时,聚集索引表的读写操作只有一次,而堆表的读写操作则分别为两次,即需要维护索引数据和表数据。
再插入时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,对于更新、删除操作的测试也没有太大意义,因为更新的列宽没有发生变化,对页面的分裂和空间利用率不产生任何影响







本文转自baoqiangwang51CTO博客,原文链接:http://blog.51cto.com/baoqiangwang/423344,如需转载请自行联系原作者

相关文章
|
SQL 存储 大数据
SQL Server 跨版本数据迁移实践
SQL Server 的导入和导出向导是一个非常有用的工具,可以帮助用户快速导入和导出数据,而无需编写复杂的 SQL 查询或程序代码。使用导入和导出向导,用户可以选择数据源、目标数据、映射源和目标列、指定导入或导出选项以及完成导入或导出操作,整个使用体验也非常简单便捷。
823 0
|
SQL 关系型数据库 数据库
阿里云数据库 RDS SQL Server版实战【性能优化实践、优点探析】
本文探讨了Amazon RDS SQL Server版在云数据库中的优势,包括高可用性、可扩展性、管理便捷、安全性和成本效益。通过多可用区部署和自动备份,RDS确保数据安全和持久性,并支持自动扩展以适应流量波动。可视化管理界面简化了监控和操作,而数据加密和访问控制等功能保障了安全性。此外,弹性计费模式降低了运维成本。实战应用显示,RDS SQL Server版能有效助力企业在促销高峰期稳定系统并保障数据安全。阿里云的RDS SQL Server版还提供了弹性伸缩、自动备份恢复、安全性和高可用性功能,进一步优化性能和成本控制,并与AWS生态系统无缝集成,支持多种开发语言和框架。
|
SQL 存储 数据库
SQL Server性能优化策略与实践
在使用Microsoft SQL Server(简称MSSQL)进行数据库管理时,性能优化是确保系统高效运行、提升用户体验的关键环节
|
SQL 存储 数据挖掘
【SQL Server】数据库开发指南(三)面向数据分析的 T-SQL 编程技巧与实践
T-SQL 指的是 Transact-SQL,是一种针对 Microsoft SQL Server 数据库系统的 SQL 方言。T-SQL 扩展了标准 SQL 语言,提供了更多的功能和特性,包括事务处理、错误处理、游标处理、动态 SQL、存储过程、触发器、用户定义函数等等。
357 0
【SQL Server】数据库开发指南(三)面向数据分析的 T-SQL 编程技巧与实践
|
SQL 关系型数据库 MySQL
Python迁移不同服务器的SqlServer数据表
把一个数据表的数据迁移到另一个表上,可以连接不同数据库和服务器(只需修改自己数据库参数、SQL语句、插入的数据量)
322 0
|
SQL Java 数据库连接
Spring Boot 集成 MyBatis和 SQL Server实践
文章共 509字,阅读大约需要 2分钟 ! 概 述 Spring Boot工程集成 MyBatis来实现 MySQL访问的示例我们见过很多,而最近用到了微软的 SQL Server数据库,于是本文则给出一个完整的 Spring Boot + MyBatis + SQL Server 的工程示例。
10535 3
|
SQL 弹性计算 监控
VSS APP(SQL Server)备份实践
阿里云混合备份服务是一套已经商业化的原生备份服务,提供了简单易用,并且高效安全的数据保护方案。现在,混合云备份服务推出了全新的VSS APP功能。通过VSS APP功能,可以把ECS实例上SQL Server中的数据库以全量、差量和日志备份的方式备份上云,如果SQL Server数据库需要恢复,可以快速恢复到相应的备份。
2387 0
|
SQL Go
mssql sqlserver 使用sql脚本检测数据表中一列数据是否连续的方法分享
原文:mssql sqlserver 使用sql脚本检测数据表中一列数据是否连续的方法分享 原文地址:http://www.maomao365.com/?p=7335   摘要:      数据表中,有一列是自动流水号,由于各种操作异常原因(或者插入失败),此列数据会变的不连续,下文将讲述使...
1223 0