SQL Server ->> 性能调优案例之 -- 包含递归查询的视图导致整个查询语句性能下降
2024-10-16 13:01:02
有个语句最近性能下降很厉害,原本1秒就可以查询完毕的事情现在居然需要3-4分钟。
首先我的做法是先快速找出导致整个语句下降的元凶。在这个例子里面查询语句有3个JOIN字句,我通过删除某一个JOIN节点来观察执行时间是否出现本质的变化,这样我就找到了原来是包含了递归查询的视图导致了整个查询语句性能的下降严重。然后我运行了一遍查询语句获取真实的执行计划(图形)。通过执行计划我观察到属于递归查询的那一部分执行计划的节点每次都会输出非常大量的数据流,比如一个聚集索引扫描操作符输出的数据行数是真实表内数据行数数量的上百倍至少,对比这个视图单独执行是截然不同的结果。我的想法是为什么SQL SERVER笨到去选择这样的执行计划呢。显然这个包含递归查询的视图是最后一个JOIN字句。如果前面的JOIN字句都先完成后再进行最后一个JOIN,这样问题不就解决了。那么我尝试把视图单独拿出来,而前面的JOIN编程一个子查询(衍生表/独立子查询)再和包含递归查询的视图做JOIN。结果执行计划彻底改变。这个应该是一个典型的执行先后顺序导致性能下降的例子。解决方法是尝试隔离导致问题的视图,等其他的工作都完成后再和这个视图进行连接,观察变化。
SQL SERVER版本是 Microsoft SQL Server 2014 - 12.0.4100.1 (X64)
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64>
最新文章
- ORACLE基本数据类型总结
- jsp标签<;c:forEach>;取出传递参数注意
- WebDriver等待和同步对象(基于C#)
- 让我们一起Go(十三)
- gmm
- PHP截取IE浏览器并缩小原图的方法
- org.hibernate.MappingException: duplicate import异常
- 删除Excel中的打印预览留下的打印线
- Android-Ant自动编译打包android项目 -- 2 ----签名与渠道包
- java集合-HashSet源码解析
- object detection[NMS]
- javascript history.go(-1) 返回刷新不起作用
- G - Line of Sight
- hdwiki 前后台版权信息在哪修改
- 乘法逆元(P3811)(四种方法)
- Tree - Information Theory
- macbook pro 开发帮助
- java.lang.NoClassDefFoundError: com.baidu.mapapi.BMapManager
- debian下没有公钥解决办法
- 3、Angular2 Input