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


【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
什么情况下会产生tabledual,同一批sql还有另外一个执行计划。
tabledual的执行计划耗时就会很低
【资源配置】
【附件:截图/日志/监控】
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还是很智能哒~
感觉是这种,改个不可能有数据的条件看下执行计划就能确定了。
手动给了个false的条件,确实是tabledual了
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。