TiDB 中explain format = 'verbose' 中是所有算子的estCost是累加起来才是该执行计划的Cost,还是根节点的Cost就代表该执行计划的Cost?

如题,TiDB 中explain format = ‘verbose’ 中是所有算子的estCost是累加起来才是该执行计划的Cost,还是第一个算子(根节点)的Cost就代表该执行计划的Cost?

应该跟explain analyze类似,第一个Cost就是整个执行计划的Cost。
我之前都不知道explain 有format这个用法,学习了。。

第一个Cost

第一个Cost就是累加结果

有点不解,如果第一个算子就是累加值,那后面的子算子的Cost为啥还有比第一个算子更大的?

我觉得应该是所有的累加值才是实际的值。

目前 TiDB 的计算任务分为两种不同的 task:cop task 和 root task。Cop task 是指使用 TiKV 中的 Coprocessor 执行的计算任务,root task 是指在 TiDB 中执行的计算任务。

1 个赞

这个明白,那执行计划的总Cost怎么计算呢?

最上面一行的cost时tidb-server层面的总cost,而tikv层面的cost要去看每个算子最上层汇总的cost之和

显然有重复的也不能直接累加

那执行计划的总Cost等于TiDB层面的总Cost和TiKV层面的总Cost之和?

可以这么理解,但是tikv实际上看着cost很高,但是他是多节点的,一个sql的tikv算子是可以多个节点并行处理的,但是tidb-server就是你连的那一个。

所以有多种执行计划时,选择哪种执行计划是基于执行计划的Cost大小,选择Cost最低的那个,那这里所示的Cost是指TiDB Server层面的Cost?还是说是TiDB层面的总Cost和TiKV层面的总Cost之和?

还有一个,有没有什么方法可以很直接地查出某种执行计划的总Cost?

那肯定是选择tidb-server和tikv总的cost大小较低的那个,但是不是简单的加法。某种执行计划的总Cost可以通过dashboard页面看吧http://127.0.0.1:2379/dashboard/#/statement