这个原因是,这是一个非关联子查询,tidb 在 编译期提前把这个子查询执行 并得到结果了,
再拿得到的结果,去继续构造 plan,然后再执行…
你注意观察一下 plan 可以发现,
这个东西里面 8102913.765246800000 就是子查询提前计算出来的结果
sum(ps_supplycost * ps_availqty) > (select 子查询 )
就被转成了 gt(Column#33, 8102913.765246800000) 这样的条件
所以你看到的生成执行计划时间过长,是因为在生成执行计划的过程中执行了子查询的 sql,并且耗时算在生成计划里面了。
这个问题被提了好多次,总是没有解掉,目前有一点积重难返的感觉…