dovefiz
(Ti D Ber Sk V Oy O Mj)
2023 年3 月 8 日 02:57
1
【 TiDB 使用环境】生产环境
【 TiDB 版本】5.1.4
【复现路径】
【遇到的问题:问题现象及影响】
复合索引(key+updated_at)
在搜索的时候使用如下搜索语句
select `key`, updated_at, is_delete from table order by `key` ASC, updated_at DESC
出现了全索引遍历
导致查询非常缓慢
如果两个order 条件都使用同方向的排序,则不会
select `key`, updated_at, is_delete from table order by `key` ASC, updated_at ASC
或者
select `key`, updated_at, is_delete from table order by `key` DESC, updated_at DESC
因为索引本身是有序的,默认都是ASC 创建的。现在排序的两个字段要求的不一样,所以需要全扫描后才能反馈出结果
dovefiz
(Ti D Ber Sk V Oy O Mj)
2023 年3 月 8 日 03:18
3
这个从tidb的角度有没有办法优化?这里是优先 key
查询,而且加了 limit
人如其名
(人如其名)
2023 年3 月 8 日 03:57
4
可以通过CREATE INDEX idx_ab ON t (a ASC,b DESC);
这种方式创建索引尝试一下
tidb 不支持降序索引。索引可以创建成功,但是show create table 就可以看出来实际还是ASC。
mysql 也是在8.0 才支持降序索引。
TIDB(6.5版本止)暂不支持降序索引(类似于 MySQL 5.7),MySQL8.0引入了降序索引(descending index)。这里说的降序索引指的是复合索引才有降序索引一说,如果是单列desc、asc都是一样。