降序索引(Descending Indexes)

isixe 2023-04-04 15:04:30
Categories: Tags:
  • 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 索引不支持降序索引。因此为 HASHFULLTEXT SPATIAL 索引显式指定 ASC DESC 指示符会导致错误。

 

 

来自 <https://dev.mysql.com/doc/refman/8.0/en/descending-indexes.html>