mysql按升序创建索引_MySQL 降序索引 (Descending Indexes)

MySQL 8.0 引入了降序索引,以优化性能,尤其在需要按不同顺序排序时。降序索引允许指定联合索引中每个字段的顺序,匹配SQL的order by顺序,提高查询效率。例如,根据字段c1和c2的不同顺序创建了4个索引,优化器将选择最匹配的索引来避免额外的排序操作。降序索引仅适用于InnoDB引擎,并有限制,如不支持全文索引和某些聚合查询。
摘要由CSDN通过智能技术生成

在 8.0 之前,能够以相反的顺序对索引进行扫描,但是会降低性能,降序索引能够实现相同的效果,且不会损耗性能。另外一个例子,当一个查询 SQL,需要按多个字段,以不同的顺序进行排序时,8.0 之前无法使用索引已排序的特性,因为 order by 的顺序与索引的顺序不一致,而使用降序索引,就能够指定联合索引中每一个字段的顺序,以适应 SQL 语句中的 order by 顺序,让 SQL 能够充分使用索引已排序的特性,提升 SQL 性能。

来看一个例子,表结构如下:

CREATE TABLE t (

c1 INT, c2 INT,

INDEX idx1 (c1 ASC, c2 ASC),

INDEX idx2 (c1 ASC, c2 DESC),

INDEX idx3 (c1 DESC, c2 ASC),

INDEX idx4 (c1 DESC, c2 DESC)

);

表中有两个字段,c1 和 c2,根据 c1,c2 的不同顺序的组合,创建了 4 个索引,由于索引字段的排序不同,因此对于不同的 order by 顺序,优化器可以使用的索引也不相同,如果 order by 顺序与索引字段的顺序一致,那么就可以避免额外的 filesort ,从而提升性能。

ORDER BY c1 ASC, c2 ASC -- 优化器选择使用 idx1

ORDER BY c1 DESC, c2 DESC -- 优化器选择使用 idx4

ORDER BY c1 ASC, c2 DESC -- 优化器选择使用 idx2

ORDER BY

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值