统计信息对执行计划的影响(二)

php中文网
发布: 2016-06-07 17:44:17
原创
1370人浏览过

统计信息对执行计划的影响(二) 上一篇文章统计信息对执行计划的影响(一)演示了统计信息对连接方式的影响,这一篇将给大家演示统计信息对单表数据获取方式的影响 在上次的测试DB上执行以下代码创建测试表及插入数据 CHECK2_T3(ID INT ,COL1 CHAR ( 800 ),COL2

统计信息对执行计划的影响(二)

上一篇文章 统计信息对执行计划的影响(一) 演示了统计信息对连接方式的影响,这一篇将给大家演示统计信息对单表数据获取方式的影响

在上次的测试DB上执行以下代码创建测试表及插入数据

CHECK2_T3 ( ID INT, COL1 CHAR(800), COL2 INT, COL3 CHAR(5000) ) ,CHECK2_T3 ),

然后执行下面代码在COL1上创建非聚集索引,我们知道创建索引的时候自动创建与之相关的统计信息,WITH(STATISTICS_NORECOMPUTE = ON)是禁用其统计信息自动更新

NCIX_COL1 ON CHECK2_T3(COL1) WITH(STATISTICS_NORECOMPUTE = ON) SHOW_STATISTICS(CHECK2_T3,NCIX_COL1)

然后再执行以下sql,看到执行计划是用的索引查找

(COL2) FROM CHECK2_T3

再往表内插入30W条C记录,因为已经禁用自动更新统计信息,所以统计信息没有变化

CHECK2_T3 ,),

这时C的记录数变成30W+,接着执行以下两条sql,②的sql使用了表提示 ,服务器空间,目的是让查询走全表扫描,①的执行计划和之前的一样,这时RID运算符的开销就相当高,以下两句对比,表扫描体现性能优势

以下两句在我本机测试的速度②比①快了一倍,虚拟主机,多次执行注意清空缓存

 

①的执行计划之所以没有走表扫描,是因为我们没有更新统计信息,我们更新统计信息后再次执行①,发现执行计划变成了表扫描

到这里演示完成。

总结,相比统计信息对连接方式的影响,对单表查询方式的影响效果不那么显著,因为表的大小变化对统计信息更新前后的运算符都起作用。如上,虽然表扫描提升了效率,但依然不能被我们接受,香港空间,我们希望更快,最好避开对原表数据页的查询,那就可以在COL1索引里包含COL2字段,这样直接扫描COL1字段上的索引便可以完成这个查询,正如执行计划上绿色提示行“缺少索引”。创建这个包含列索引后,sq效率大大提升,可以打开STATISTICS IO观察逻辑读大量减少。

另外需要说的是,通常情况下sqlserver提示的缺失索引都能带来查询效率的提升,但你也应该明白每创建一个索引都会降低系统写的效率,关于这些不在本篇文章讨论。我会在以后的专门系列里分享一些优化手法及注意事项。

posted on

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号