zhanggame1
(Ti D Ber G I13ecx U)
1
【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
测试案例:分区表有两个,list分区,分区键draw_id,区别是主键不同,ticket2主键是(draw_id,ticlet_no),ticket1主键是(ticlet_no,draw_id),数据量2700万,数据完全一样,建表语句如下:
同样的sql执行计划不同
问题是:
分区表要求分区键需要在主键里面,这样主键是联合主键,分区键必须放主键索引第一位吗?我这里测试分区键放第二位sql就走全表扫描了
zhanggame1
(Ti D Ber G I13ecx U)
2
从测试来看,按draw_id分区,只要draw_id不在主键的第一位,执行计划就会走全表扫描
1 个赞
小龙虾爱大龙虾
(Minghao Ren)
3
就是索引最左匹配原则啊(啊?什么?你说关联键draw_id是list分区表的分区键,不能NL_JOIN然后分区裁剪走分区全扫嘛?可能就没实现吧 )
1 个赞
zhanggame1
(Ti D Ber G I13ecx U)
4
理论上有分区键在where条件里面应该直接查这些分区而不是全表扫描,所以这里让人很疑惑
小龙虾爱大龙虾
(Minghao Ren)
6
你说的二楼的简单查询啊,那两个都走了分区裁剪了啊,你看下access object里都有partition关键字,其实是TiDB就没分区全扫的算子,分区全扫显示也是全表扫
dba远航
(Ti D Ber M Lo7 Bqhk)
8
主键索引第一位还是第二位,要看过滤条件是用什么过滤
两个sql的actrows是一样的,上面的sql索引最左原则走的是indexjoin 下面sql没有合适索引走的hashjoin,你对下面sql的表单独建一个索引两个就一样了
wangccsy
(Ti D Ber Wc Tp L Gn I)
10
TiDB的培训视频讲解得很基础。不错。对于分区表的使用我也不多。但视频 里有,视频也考虑不到所有的场景。
zhanggame1
(Ti D Ber G I13ecx U)
11
2楼的sql查询查询结果速度一样的 ,我认为是执行计划估算的行数不对