分区表的单列索引和组合索引的怎么建

有一个表 A 是一个分区表 分10个分区 分区键是city_id 假如有一个查询条件 select * from A WHERE city_id=1 and create_time>= “2021-01-02 00:00:23” and create_time<= “2022-01-02 00:00:23” and status = 1 问 这时候 是建组合索引 还是 单列索引 (单列索引是create_time) 组合索引是 city_id+create_time ? 假如同一个分区 存了不同的city数据 create_time 时间相同的数据有很多,组合索引会更好?求大神解答一下

tidb和mysql不同,组合索引更好,性能要求高的语句可以把where条件都建进去

1 个赞

这个得取决于你的查询语句是否可以利用分区裁剪。你给的这个语句因为是分区键等值查询,都是可以利用分区裁剪的,所以在create_time上建单列索引是可以的。
但是如果你有其他语句导致执行计划不能利用分区裁剪,复合索引的效率就会比单列索引的效率高。

7.5的版本还不支持全局索引,也就是说,你的索引肯定是本地索引,在分区字段确定的情况下,分区裁剪之后,肯定是create_time要比组合索引消耗要小一点,但是我感觉差距不会很大,因为你的city_id字段应该不会很长

get,谢谢大佬

感谢大佬回复,create_time要比组合索引消耗要小一点 此话怎讲?组合索引不是可以过滤掉更多的数据吗?同一个分区 也会有不同的city_id的数据哦,

tidb的分区表,实际是由多个物理表组合而成,如果你确定你查的是哪个分区,分区裁剪确定到分区物理表上,联合索引上分区字段就浪费了啊,不如单纯的create_time索引

1 个赞