关于sql执行计划顺序怎么看

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】7.5
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
比如以下执行计划,我觉得是先执行的是TableFullScan_163,不知道对不对?

先执行179,参考:https://docs.pingcap.com/zh/tidb/stable/explain-overview#算子的执行顺序

1 个赞


这段不是很看得懂

最先执行的是179,可以参考oralce的执行计划。

是不是这么理解:
├─Selection_173(Build)
└─HashJoin_120(Probe)

这两个是同样缩进,先执行Build,所以执行Selection_173(Build),然后先执行缩进最多的TableFullScan_179
image

Build 总是先于 Probe 执行,同级缩进,先build后probe

:yum:简单来说就是从右到左,从下到上。需要注意的是,有一些都并行执行的,不分先后。

1 个赞

按照Oracle最右最上先执行的原则应该是163,因为他最右,缩进最深。
个人更加愿意是151,多表关联的时候时都是两两关联,按哈希关联层数算,151是最里面的。

Oracle客户端有类似单步的功能可以查看执行计划的顺序,TiDB不知道会不会出类似GUI客户端。

tidb按手册是并发执行,我想了下执行计划转成个二叉树,179 163 151 154 170是5个叶子结点,应该可以同时执行,无所谓先后

嗯,理论上分布式环境并发执行最科学的。
Oracle可能是因为多是本地执行,并发最终到底层还是得排队。

我感觉执行计划有点奇怪,为什么我框起来的地方没对齐呢?

可能是显示问题


算子的执行顺序

同级别先上后下,不同级别先右后左

应该是工具UI显示的问题吧。

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。