请问下各位老师
为什么tidb的分区表在静态裁切模式下,用不了index join,像文档中的例子
https://docs.pingcap.com/zh/tidb/stable/partitioned-table#动态裁剪模式
不知道我的思考对不对?像文档中的例子
mysql> explain select /*+ TIDB_INLJ(t1, t2) / t1. from t1, t2 where t2.code = 0 and t2.id = t1.id;
在没有动态裁切模式下,不能直接获取t2.id的值,无法和t1.id 进行关联,所以走不了index join嘛(无法利用t1.id 这个索引进行index join)
xfworld
(魔幻之翼)
2
全局索引目前对分区裁减还不支持(二级索引),估计在 6.5.X 会完善,可以关注
你理解的没错的,目前分区裁减适合缩小数据范围,但是缺少二级索引的支持
你这个必须把id作为条件吧,where t1.id<30,不然裁剪什么。。。
我很好奇,在MySQL上实现了index join,但是没有实现分区裁剪,这执行计划,有点让我搞不懂了
xfworld
(魔幻之翼)
7
没啥好奇的,面对的场景不一样,mysql 也有分区,只不过目前不支持这种 “能力”
执行计划是通过采集和统计信息综合估算得出来的,有偏差,或者不一样也正常
我在6.5.0无论动态裁剪还是静态裁剪,执行计划都一样,都是hash join
@@tidb_partition_prune_mode 这个值是dynamic
我的问题,表用错了,用的以前测试建的表,确实动态裁剪会走indexjoin,静态走的是hashjoin