v7.5.2 索引热点,split index region后还无法解决,如何优化

已经让开发改成left join,再加新索引。关于分区二级索引到底怎么执行的,等官方答复

前几天提出修改成 left join了 ,开发请假了还没改过来。 :joy:

这个partition(all) 应该是tidb 动态分区裁剪还不够完善导致。

是的,现在都是动态分区了,结果执行计划显示的内容让人疑惑

试了下ob 类似sql也是不能裁剪,oracle可以做到

2 个赞

NOT EXISTS 范围太大了吧所以 all partition,你换成 EXISTS 看看是不是会传递 tenant_id = 187

这个测试有误,外层查询没加子查询表的分区键条件,不过tidb的加上后结果也是一样

SQL改成left join,并加 (tenant_id ,link_id ,link_end_time )`的联合索引解决热点

1 个赞

现在执行计划啥样

执行计划的瓶颈在于 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);

1 个赞

新的执行计划

2 个赞

可以,这好多了。

是一个已知问题

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; 就可以做分区裁剪了