var*_*ble 1 sql-server execution-plan sql-server-2019
我正在查看执行计划并从右到左阅读它。
例子:
1<-2<-3<-4
^
|_5
Run Code Online (Sandbox Code Playgroud)
所以4和5是并行执行的。当两者都完全完成时,则 3 完全执行,然后 2 完全运行,然后 1。
这是正确的还是可能存在以下情况:
3 甚至在 4 和 5 完全完成之前就开始执行。
2 甚至在 3 完全完成之前就开始执行。
您误解了这些箭头的含义。它们不代表执行顺序,而是代表数据流。
每个运算符不会完整执行,然后将所有行传递给下一个运算符,除非它是阻塞运算符。它们也不一定意味着它们是并行执行的。
相反,每个运算符一次将一行传递给下一个运算符。连接运算符3将等待 4 中的一行,然后再调用 5 获取其第一行。这称为迭代器。
因此,如果4是阻塞运算符(例如排序),那么它将在内部生成所有行,然后将它们一一传递给3,而 3 又会请求5中的行。如果5也处于阻塞状态,那么它就必须等待。
但大多数运算符都不会阻塞,因此通常每一行一次都会经过一个。通过3处的联接从4中获取一行,然后从5中获取一行并联接,如果相关,则从5中获取更多行,然后该过程再次从4中的另一行开始。
如果这是并行计划,则运算符4和5仅会并行执行。
在并行计划中,数据被分区,每个线程处理部分数据,其方式与串行计划类似。
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |