已经让开发改成left join,再加新索引。关于分区二级索引到底怎么执行的,等官方答复
前几天提出修改成 left join了 ,开发请假了还没改过来。
这个partition(all) 应该是tidb 动态分区裁剪还不够完善导致。
是的,现在都是动态分区了,结果执行计划显示的内容让人疑惑
NOT EXISTS 范围太大了吧所以 all partition,你换成 EXISTS 看看是不是会传递 tenant_id = 187
这个测试有误,外层查询没加子查询表的分区键条件,不过tidb的加上后结果也是一样
SQL改成left join,并加 (tenant_id
,link_id
,link_end_time
)`的联合索引解决热点
现在执行计划啥样
执行计划的瓶颈在于 idx_link_id
(link_id
,link_end_time
) 回表效率低,直接用覆盖索引应该可以解决性能瓶颈
create index idx_new on leader_relate_link_extention_log(link_id,tenant_id,status,link_end_time);
可以,这好多了。
是一个已知问题
planner: constant propagation supports sub-queries in update statements · Issue #51700 · pingcap/tid
,tidb 的常量传递不会往子查询里面传递,改写成 explain select t.* from t where not exists (select 1 from t1 where t1.k=100830788 and t.c=t1.c and t.pad=t1.pad ) and t.id=5785253 and k=100830788; 就可以做分区裁剪了
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。