能否直接输出优化器改写后的语句?

需求反馈
如果优化器将原有的语句进行改写了,那么是否可以通过 show warnings; 来显示,这样可以帮助用户更清晰的去了解执行计划
【需求涉及的问题场景】
优化器将改写后的语句暴露出来
【期望的需求行为】
优化器将改写后的语句暴露出来
【需求可替代方案】

【背景信息】

explain analyze select count(*) from (select * from a order by c1) a;

这条语句我只是举个例子,没多大实际意义,这条语句其实在逻辑优化阶段把order by 这个动作去掉,改写为 select count(0) from a;
从执行计划来看应该是这么做得

mysql> explain  select count(*) from (select * from a order by c1) a;
+--------------------------+---------+-----------+-----------------------------+-------------------------------+
| id                       | estRows | task      | access object               | operator info                 |
+--------------------------+---------+-----------+-----------------------------+-------------------------------+
| StreamAgg_8              | 1.00    | root      |                             | funcs:count(1)->Column#4      |
| └─IndexReader_20         | 3.00    | root      |                             | index:IndexFullScan_19        |
|   └─IndexFullScan_19     | 3.00    | cop[tikv] | table:a, index:index_c1(c1) | keep order:true, stats:pseudo |
+--------------------------+---------+-----------+-----------------------------+-------------------------------+
3 rows in set (0.00 sec)

通过这个例子,我们想要tidb 将改写的语句通过show warnings; 来暴露出来帮助用户更好的去判断语句的执行过程
例如MySQL的行为

就可以通过这样的方式来将优化器改写的语句暴露出来,tidb 是不是也可以这样做呢?
个人的一点建议,不知道其他老师认为是否需要

1 个赞

等价SQL智能改对优化器来讲是个很大的挑战