浅谈SQL Server中统计对于查询的影响分析
SQL Server查询分析器是一款基于开销的工具,其主要任务是根据谓词选择高效的查询路径。通常,它并不会每次查询时都去统计索引中的详细数据,如包含的行数或值的范围等。相反,它依赖于一种叫做统计信息的资源,这些信息在一定的条件下被创建和更新,并存储在数据库中。
查看SQL Server的统计信息非常简单,只需使用DBCC SHOW_STATISTICS命令,后跟表名和索引名,即可得到详细的结果。通过查看这些统计信息,我们可以了解表中的数据分布和索引的使用情况。
对于那些可以直接确定的谓词,如日期、ID、销售额等查询,查询分析器能够很好地利用柱状图来选择最佳的查询路径。对于那些在运行时才知具体值的查询,或者涉及多个查询条件的谓词,采样步长可能不再适用。在这种情况下,SQL Server会使用密度来确定最佳的查询路线。密度的计算公式是表中唯一值的个数分之一,当密度较小的时候,索引更有可能被选中。
随着表中数据量的增长,密度会逐渐减小。对于那些不能根据采样步长做出选择的查询,查询分析器会使用密度来估计行数。实际查询时,估计的行数可能与实际行数有所出入,但在数据分布均匀或数据量大的情况下,这个误差会变得非常小。
统计信息自动创建与查询性能的关系
当我们谈论数据库查询优化时,统计信息是一个不可忽视的关键因素。在图6中,我们看到了一个关于自动创建统计信息的选项。当此选项设置为True时,对于不在任何索引上的列,其统计信息会自动被创建。但这一过程也存在例外情况。
当创建统计信息的成本超过生成查询计划的成本时,或者当SQL Server忙碌时,统计信息的自动生成会被暂停。统计信息的重要性在于它们为数据库优化器提供了关于数据分布和特性的关键信息,这些信息直接影响查询路径的选择。换句话说,统计信息的准确性对查询性能有着直接的影响。过时的统计信息可能会导致查询性能的降低。DBA们的一项重要任务便是定期更新统计信息。那么如何查看这些统计信息呢?我们可以借助于系统视图sys.stats来实现(如图7所示)。这个视图为我们提供了关于数据库中所有统计对象的信息,使我们能够轻松地查看和管理统计信息。我们还可以手动创建统计信息。使用语句“CREATE STATISTICS 统计名称 ON 表名 (列名 [,...n])”,即可轻松完成此操作。通过这一简单而直接的命令,我们可以为指定的表和列创建自定义的统计信息。理解并有效利用数据库的统计信息对于提高查询性能至关重要。作为数据库管理员,我们需要密切关注统计信息的更新情况,确保它们能够准确反映数据的实际分布和特性,从而帮助我们做出最优的查询路径选择。这样,我们的数据库查询效率将得到显著提高,为应用程序提供更好的性能和响应速度。
编程语言
- 浅谈SQL Server中统计对于查询的影响分析
- ECshop 迁移到 PHP7版本时遇到的兼容性问题
- PHP+APACHE实现网址伪静态
- 实例解析Vue.js下载方式及基本概念
- 浅谈PHP的数据库接口和技术
- jQuery实现表格行和列的动态添加与删除方法【测
- 微信小程序实现图片上传放大预览删除代码
- PHP中的empty、isset、isnull的区别与使用实例
- php判断表是否存在的方法
- JQuery选中select组件被选中的值方法
- BootStrap中Table隐藏后显示问题的实现代码
- thinkPHP中volist标签用法示例
- JQ选择器_选择同类元素的第N个子元素的实现方法
- phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
- JavaScript实现输入框(密码框)出现提示语
- 使用Linux五年积累的一些经验技巧