select执行计划中的tabledual

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
什么情况下会产生tabledual,同一批sql还有另外一个执行计划。
tabledual的执行计划耗时就会很低
【资源配置】
【附件:截图/日志/监控】


1691110183150
1691110263381

sql里面是不是有limit?
limit 0就会直接优化为table_dual,避免无用的执行计划构建

select id , a . customerno as customerno , a . customernosub as customernosub , naturaldate , code , shareval , costvalue , nav , marketvalue , ratio , a . createtime as createtime , adjusttype , a . updatetime as updatetime from table . tablea a where a . customerno >= ? and a . customerno < ? and a . updatetime >= ?
sql这样

是不是有缓存?第一遍读取是空,第二遍读取就走table_dual了

条件里面的customerno>?<?的两个值是会变化的,每次不会查一样的值

是不是会出现 a . customerno >= 2 and a . customerno < 1这样的情况,这样查询出的数据就是limit0,这种情况,sql执行计划就会直接优化为table_dual,避免无用的执行计划构建。

那应该就是楼上老哥说的那种情况了。tidb还是很智能哒~ :wink:

感觉是这种,改个不可能有数据的条件看下执行计划就能确定了。

手动给了个false的条件,确实是tabledual了

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