explain文档描述问题

  • 出现的错误:

  • 问题分类:描述不清有歧义

  • 出现的页面:https://docs.pingcap.com/zh/tidb/v6.1/sql-statement-explain

  • 出现的问题:
    在查询优化过程中,TiDB 默认会提前执行可以在优化阶段直接计算的子查询。
    一般认知里explain是不影响数据库的,如果有一个SQL子查询性能非常差,explain可能会影响系统,文档里明确说明explain不会执行查询,这里我觉得描述不对,不太严谨。

1 个赞

explain仅仅是根据当前的统计分析信息的结果来进行计算出的 执行计划。
你使用explain 执行有子查询的sql 影响系统了??

是的,根据这里的文档explain是有可能真正执行sql子查询的

explain不会真实的执行SQL的,为何会有影响呢

看看我上面发的图,某些情况explain子查询可能会被提前执行,
我遇到的情况是select * from t1 where a = (select max(a) from t2)
select max(a) from t2 在explain 阶段被执行了,所以我认为文档不严谨,explain是有可能真正执行SQL的

恩,那你这个情况可能也会有,子查询也要先查出来相关信息再和外面的表做关联。你这个select max(a),有可能是没有索引,表比较大,所以他就要执行全表了,如果有索引。可能就不执行了,他通过索引就可以查到max值了吧。

其实我的问题不是这个,这个我理解,去优化SQL就好了,我是想说文档的说法太绝对了,建议修改下

恩。其实就是有些子查询在执行explain的时候 他是通过当前统计信息直接计算。有些他可能会涉及到子查询实际执行运算。

感谢逐步解答

提 pr 了

sql-statement-explain: add explanation related to scalar subquery by time-and-fate · Pull Request #1

相关进度可见

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