MySQL 8.0 版本开始支持降序索引(Descending Indexes),在 8.0 之前的版本,使用关键字 DESC 定义降序索引时,实际上 DESC 是被忽略的,从 8.0 版本开始,DESC 定义的索引,真的就是降序的索引。

在 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 c1 DESC, c2 ASC -- 优化器选择使用 idx3

添加降序索引语法:

除了在建表时创建降序索引以外,还可以使用改表添加索引的语法来创建降序索引。

alter table tb add index idx_1(name desc, address asc);

create index idx_2 on tb(name desc, address desc);

降序索引的限制条件:

只有 InnoDB 存储引擎支持降序索引,其他引擎不支持。

如果二级索引或者主键索引包含降序字段,那么 change buffer 将不支持这样的索引。

InnoDB 全文索引的 FTS_DOC_ID 字段不能被定义为降序索引。

只要升序索引支持的数据类型,降顺索引都支持。

降序索引支持普通的字段和虚拟字段。

对于使用聚合函数 max()/min(),但是没有使用 group by 子句,不能使用降序索引进行优化。

降序索引只支持 BTREE 索引,不支持 HASH 索引,同样也不支持全文索引和空间索引。

php数据降序索引,MySQL 降序索引 (Descending Indexes)相关推荐

  1. mysql 添加索引 mysql 如何创建索引

    mysql 添加索引 mysql 如何创建索引 1.添加PRIMARY KEY(主键索引)  mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( ` ...

  2. php普通索引和唯一索引,mysql下普通索引和唯一索引的效率对比

    昨天有位同事说,他的网页查询过程中发现普通索引和唯一索引的效率是有差别的,普通索引比唯一索引快 今天在我的虚拟机中布置了环境,测试抓图如下: 抓的这几个都是第一次执行的,刷了几次后,取平均值,效率大致 ...

  3. php普通索引和唯一索引,MySQL中普通索引和唯一索引的区别详解

    本篇文章介绍了MySQL中普通索引和唯一索引的区别,讲解很详细,希望对学习MySQL的朋友有帮助! 需要注意的是: redo log中的数据,可能还没有 flush 到磁盘,磁盘中的 Page 1 和 ...

  4. mysql创建fulltext索引,MYSQL的FULLTEXT索引功能

    下文转自某些手册,你可以用这个语句来创建FULLTEXT类型的索引: CREATE FULLTEXT INDEX INDX_TEXT ON ARTICLE (TITLE,NOTE); 到 3.23.2 ...

  5. mysql索引增加栏位_mysql 添加索引 mysql 如何创建索引

    1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引 ...

  6. MySQL高级 —— 高性能索引

    引言 最近一直在抱着<高性能MySQL(第三版)>研究MySQL相关热点问题,诸如索引.查询优化等,这阶段的学习是前一段时间MySQL基础与官方的"阅读理解"的进一步延 ...

  7. MySQL事务与索引

    MySQL事务与索引 一.事务 1.事务简介 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务. 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行, ...

  8. 一文搞懂 MySQL 中的索引

    1. 什么是索引 MySQL 官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构.可以得到索引的本质:索引是数据结构. 举一个例子,平时看任何一本书,首先看到的都是目录, ...

  9. mysql如何创建简单索引_mysql 如何创建索引呢,这个其实很简单

    mysql 如何创建索引? mysql 如何创建索引呢,这个其实很简单 create index或者为己有字段增加索引 ALTER TABLE `table_name` ADD UNIQUE (`co ...

  10. mysql的最佳索引攻略

    Explain优化查询检测 所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找,而用的最多,并且是mysql默认的 ...

最新文章

  1. Ubuntu 16.04.6 LTS 发布:紧急修复 APT 漏洞
  2. Arts 第十九周(7/22 ~ 7/28)
  3. 12、OpenCV Python 图像梯度
  4. ktor框架用到了netty吗_Ktor-构建异步服务器和客户端的 Kotlin 框架
  5. [HDU] 3491 Thieves
  6. PHP网站实现地址URL重定向
  7. 一个非常强大的静态导航网站nav
  8. 电商系统如何实现订单超时自动取消?
  9. 联想启动Kind City项目:交互式全球合作鼓励同理心,共创建立于善意之上的未来
  10. MAC jd-gui 安装
  11. github网络安全项目工具集合
  12. 【游戏设计图形学】模拟自然界火焰的方法
  13. k8s之四层负载均衡Service:概念、原理解读
  14. 机电一体化基础知识及实训QY-JDYT01
  15. eclipse输出中文变成乱码问题
  16. 制造企业信息化时代——SaaS系统下沉,移动端上升
  17. 通过ssh提交代码造成提交失败的问题
  18. OTB数据集中的标签含义及对应的视频序列
  19. MVC区域areas添加出现错误,生成空文件夹问题
  20. vue3 + vite引入scss全局变量

热门文章

  1. 《微积分:一元函数微分学》——费马定理
  2. 西门子实数转整数_实数如何转换为整数
  3. python word 表格宽度_RPA手把手——python-docx 设置 word 文档中表格格式
  4. 中央民族大学计算机考研2020,2020年中央民族大学856计算机学科专业综合考研复习资料...
  5. oracle异构mysql_Oracle GoldenGate学习之--异构平台同步(Mysql到Oracle)
  6. 边城性格悲剧_悲剧! 我的手表已延迟!
  7. 微信表情的字符编号完整版【图文并茂哦 】
  8. 倪明选:追忆似水流年,祝愿更加辉煌
  9. AutoSar FlashDriver
  10. BH1750光照传感器