【TiDB 使用环境】生产环境
【TiDB 版本】8.5.1
【操作系统】rockylinux
【部署方式】机器部署(96vcpu 256G、nvme硬盘)
【集群数据量】8T
【集群节点数】3tikv+3tiflash
【问题复现路径】查询
【遇到的问题:问题现象及影响】同一个sql查询 查询条件不同执行计划不同,想请教一下是什么原因
表t 有19亿+的数据 。其中agent_no_tree LIKE concat(‘101106,103264’, ‘%’) 占了10亿+ 的数据
以下是两个sql以及执行计划,表t的索引有idx_oatime(order_time,agent_no_tree,project_no)
SELECT /*+ read_from_storage(tiflash[t,p]) / count() FROM t_agent_order t LEFT JOIN t_agent_project p ON t.project_no = p.project_no WHERE 1 = 1 AND t.order_time BETWEEN ‘20250501000000’ AND ‘20250531235959’ AND t.agent_no_tree LIKE concat(‘101106,129456’, ‘%’);
SELECT /*+ read_from_storage(tiflash[t,p]) / count() FROM t_agent_order t LEFT JOIN t_agent_project p ON t.project_no = p.project_no WHERE 1 = 1 AND t.order_time BETWEEN ‘20250501000000’ AND ‘20250531235959’ AND t.agent_no_tree LIKE concat(‘101106,103264’, ‘%’);
以上两个执行计划,其中的push down filter的字段不一样,在我的理解当中应该是先通过order_time 去划分范围 ,然后再根据agent_no_tree 去过滤才对,所以不太理解这个执行计划的结果,想请问一下是什么原因导致的