tidb预查询过程中索引与非索引字段条件构造的计划不同导致condition信息缺失

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】v 4.0.11 release版本

【问题描述】tidb跑预处理过程遇到一些问题。比如如下sql:update table1 set name = ? , age = ? where id = ?
它的程序执行步骤将是这样:handleStmtPrepare → Prepare → PrepareStmt → Next
在PrepareExec.Next方法中,它会通过stmts去构造计划p,这个计划是一个物理计划。我在源码学习的过程中观察计划p的 condition 相关的信息,在这里也就是 id = ?(id 是主键索引) ,但是没有找到这些信息。修改一下这个sql,不使用索引,使用普通字段,比如 where name = ?。再次执行得到计划p。现在计划p中就可以找到条件字段condition。
如图是索引字段条件时,condition字段消失的情况。

下图是使用普通字段条件时,计划p的结构,在其中可以找到 condition 信息

请问使用普通字段条件在哪可以看到这些条件呢?


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

  1. 具体哪个版本?请给出小版本,多谢。
  2. 您这边什么业务? 目前有什么影响吗? 生产环境还是测试环境?

v 4.0.11 release版本
主要是源码学习,这好像并不是bug,只是对这两种情况下计划结构改变不是太清楚。
包含索引字段的条件构造出的计划找不到条件放哪了

啊 这里可以看两次的 SelectPlan 自己的 type
第一次是 PhysicalTableDual,意思是这是不会返回任何数据的假表。
第二次是正常的 PhysicalTableReader 所以就可以看到 condition 了。

嗯,我知道这些情况,但是为什么第一次生成的计划是 dual 呢?
第一次构建计划不需要这个condition 条件吗?
我现在想找到第一种情况下的 condition 的位置

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