-
出现的错误:
-
问题分类:描述不清有歧义
-
出现的页面:https://docs.pingcap.com/zh/tidb/v6.1/sql-statement-explain
-
出现的问题:
在查询优化过程中,TiDB 默认会提前执行可以在优化阶段直接计算的子查询。
一般认知里explain是不影响数据库的,如果有一个SQL子查询性能非常差,explain可能会影响系统,文档里明确说明explain不会执行查询,这里我觉得描述不对,不太严谨。
1 个赞
explain仅仅是根据当前的统计分析信息的结果来进行计算出的 执行计划。
你使用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 天后被自动关闭。不再允许新回复。