Oracle使用desc index的场景很多,这里就不再赘述了,可喜可贺MySQL 8.0开始也有了倒叙索引,
使用倒叙索引后,就会避免filesort 操作,执行计划中会看到backward index scan关键字,译为中文就是倒叙索引范围查找
mysql>explain select * from test_backup.paralleltest order by id desc
+----+-------------+--------------+------------+-------+---------------+---------+---------+-----+------+----------+---------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------------+------------+-------+---------------+---------+---------+-----+------+----------+---------------------+
| 1 | SIMPLE | paralleltest | | index | | PRIMARY | 602 | | 3000 | 100 | Backward index scan |
+----+-------------+--------------+------------+-------+---------------+---------+---------+-----+------+----------+---------------------+
返回行数:[1],耗时:8 ms.
·innodb只是适用于innodb存储引擎,并且受到以下限制:
-如果索引包含一个降序键的列,或者主键包含一个降序的索引列,changebuffer不支持
-innodb的sql解析器不使用降序索引
·降序索引和升序索引一样,支持所有的数据类型
·distinct可以使用降序索引
·降序索引支持btree,但是不支持hash索引
·降序索引不支持全文索引、空间索引·降序索引支持常规索引,和gernerated列(virtual\stored类型的列)
·对于有聚合函数调用,但是没有group by语句时,min()/max()查询优化不会使用带有降序键的索引进行优化
·降序索引的引入,MySQL 8.0再也不会对group by操作进行隐式排序