- 在MySQL8.0版本中支持了 降序索引(Descending Indexes) 功能,升序索引可用的所有数据类型都支持降序索引,现在我们可以在定义索引时指定索引列的排序方式
- 只有InnoDB存储引擎才支持降序索引,但有以下限制:
- InnoDB SQL 解析器不使用降序索引。对于 InnoDB 全文搜索,这意味着索引表的 FTS_DOC_ID 列上所需的索引不能定义为降序索引。
- 如果索引包含降序索引键列或主键包含降序索引列,则二级索引不支持更改缓冲。
示例
CREATE TABLE user (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
age int(11) NOT NULL,
PRIMARY KEY (id),
KEY `name_age_idx` (name, age DESC)
)
SELECT * FROM user
ORDER BY name ASC, age DESC;
- 调整后索引的列顺序和order by子句顺序完全一致,并且所有列的排序方向都一样,查询可以使用索引排序
注
- DISTINCT 可以使用任何包含匹配列的索引,包括降序键部分。
- 具有降序键部分的索引不用于调用聚合函数但没有 GROUP BY 子句的查询的 MIN()/MAX() 优化。
- BTREE 支持降序索引,但 HASH 索引、 FULLTEXT 或 SPATIAL 索引不支持降序索引。因此为 HASH、FULLTEXT 和 SPATIAL 索引显式指定 ASC 和 DESC 指示符会导致错误。
来自 <https://dev.mysql.com/doc/refman/8.0/en/descending-indexes.html>
降序索引(Descending Indexes)
https://notebook.itea.dev/2023/04/04/MySQL(Beta)/索引/单列 -› 多列(组合/复合/联合)索引/替代方案/最左匹配原则/有序索引排序/降序索引(Descending Indexes)/index.html