TiDB使用前缀联合索引,查询的字段都在前缀索引里,执行计划会有一个回表的操作,正常吗?
如t3表有前缀联合索引(col1(200),col2,col3),其中col1的字段类型为varchar(4000),这个时候查看如下查询SQL的执行计划,发现执行计划并不是走的覆盖索引,走完这个前缀联合索引,还会回表,这种情况是正常的吗?
select col1,col2,col3 from table1 where col1='xx' and col2='xx' and col3='xxx';
TiDB使用前缀联合索引,查询的字段都在前缀索引里,执行计划会有一个回表的操作,正常吗?
如t3表有前缀联合索引(col1(200),col2,col3),其中col1的字段类型为varchar(4000),这个时候查看如下查询SQL的执行计划,发现执行计划并不是走的覆盖索引,走完这个前缀联合索引,还会回表,这种情况是正常的吗?
select col1,col2,col3 from table1 where col1='xx' and col2='xx' and col3='xxx';
你既然是前缀索引,索引里面保存的就是你的col1列的前缀,实际你不是查col1的完整数据吗?不回表怎么查出来?
使用适当的前缀长度,有助于减少索引占用的空间并加快插入速度,但可能会降低某些查询的效率,比如说回表。因此需要权衡。合理调整下所索引字段的顺序
正常