逆序索引,对索引进行逆序 Scan,但是速度要比顺序 Scan 慢 5 倍左右,这是指索引列查询时按 ASC DESC 有性能差异?

看 TiDB Best Practice 无意中看见里面提到逆序索引

不知道这个逆序索引慢具体指什么?

比如一个表

  CREATE TABLE `test` (
	`id` bigint(20) NOT NULL,
	`ctime` int(10) UNSIGNED NOT NULL DEFAULT '1363033208',
	PRIMARY KEY (`id`),
	Key `ctime` (`ctime`)
  ) ENGINE=InnoDB ;

在 ctime 上有索引。

那么下面两个语句的查询时间会因为上面说的逆序索引有差异吗?


 select id from test  where ctime < 1590650228 order by ctime desc

 select id from test where ctime < 1590650228  order by ctime asc

逆序是要比顺序慢,会有差异,desc 会比顺序慢

那假如只用逆序有什么办法解决?创建索引时指定 DESC ?

创建了一个 DESC 的索引,但是 show create table 和 show index 都看不出按什么排序

  1. 感觉没有
  2. tidb 和 mysql 一样,支持desc语法,实际上还是asc。不过8.0以后,mysql应该支持逆序索引了。

tidb 逆序为什么会慢?有优化计划吗?

原理这边暂时没有找到专门的说明,您可以参考这篇文章来了解下,多谢,

优化需求您可以帮忙反馈到这里

这个不支持,在官方文档有说明吗?还真不知道有这个问题。
我在这个文档中,看到是支持逆序的呀:

https://docs.pingcap.com/zh/tidb/v4.0/tidb-best-practices
逆序索引

目前 TiDB 支持对索引进行逆序 Scan,目前速度比顺序 Scan 慢一些,通常情况下慢 20%,在数据频繁修改造成版本较多的情况下,会慢的更多。如果可能,建议避免对索引的逆序 Scan。