• 如何阅读执行计划


    今天我想谈下一个非常“简单”的话题:如何阅读执行计划。首先,这个看起来是非常简单的问题,但是当你看看的答案的细节时,它可是令人惊奇的。有2种方式阅读执行计划——从右到左,和从左到右。我们来详细看下,哪个才是正确的……

    从右到左?

    在SQL Server里,当你开始和执行计划打交道时,你总听到推荐:你应该从右到左阅读执行计划。但是为什么呢?我们看书,杂志,报纸都是从左到右,现在我们阅读执行计划应该从右到左?首先这看起来就不太合理。但当你知道在查询执行期间发生了什么,从右到左的方法就更合理了。

    SQL Server内部为查询执行使用所谓的迭代器模式(Iterator Model)。在执行计划里每个运算符内部是个C++类,把行传个下一个前面的运算符。因此在执行计划里结果数据流总是从右到左的,如你在下图里看到的。

    因此从右到左阅读执行计划非常合理,因为你跟着执行计划的数据流走。我经常告诉人们首先专注下执行计划的右手边,因为那是所有问题的发源地:你通过索引数据结构访问你的数据。如果你看到有在大表上进行扫描操作,你该马上知道你要调整下你的索引设计。 

    从左到右?

    另一个阅读执行计划的方法是从左到右。但从上一部分的你会发现,这个真的不合理,因为执行计划里数据流是从右到左的。那什么情况下从左到右阅读执行计划才合理呢?这个看情况……

    我们来仔细看下为什么说这个是看情况。我刚才提过对于执行计划,SQL Server内部使用迭代器模式。每个运算符从右边的运算符请求行,右边的运算符又返回行给左边。因为执行计划物理上还是从左到右执行的。我们来看下面的图片。

    在图里第1个运算符从第2个例请求行,第2个从第3个请求行,最后第3个运算符返回行给第2个,地2个运算符返回行给第1个。执行计划物理上是从左到右,数据流是从右到左的。顺便说下,执行计划里有部分是可能从未被执行的(嵌套分区视图),还有在执行计划里,扫描运算符可以被缩短,因此扫描不一定总是扫描

    小结

    如果你问别人如何阅读执行计划,那没有错的答案。你可以从右到左读,也可以从左到右读。2个方法都有它们的优缺点。一般我建议从右到左阅读之星计划,因为到时你会跟着逻辑数据流,它会帮助你找到在哪方面因为大量行而有性能问题。

    感谢关注!

    参考文章:

    https://www.sqlpassion.at/archive/2015/08/24/how-to-read-an-execution-plan/

  • 相关阅读:
    Microsoft To-Do无法同步问题 ke xue上网导致
    学习希尔排序
    查找docker无法启动的原因
    挂载只读分区为可读写
    批量重建索引脚本
    frp nginx 80 端口共用
    vue部署nginx 404
    阿里云服务器,数据库热备、暖备、冷备实战-镜像篇(域环境下配置)
    码农老婆的网店
    Wcf调用方式
  • 原文地址:https://www.cnblogs.com/woodytu/p/4755371.html
Copyright © 2020-2023  润新知