MYSQL8.0-降序索引
官方文档地址:https://dev.mysql.com/doc/refman/8.0/en/descending-indexes.html
https://dev.mysql.com/blog-archive/mysql-8-0-labs-descending-indexes-in-mysql/
首先我们先看一下5.7版本和8.0以上版本之间建立索引的区别
- 5.7版本只支持升序索引
- 5.7版本不能支持降序索引的主要限制是优化器必须使用文件排序来实现混合顺序
- 8.0+ 版本增加了降序索引
进行对比 - 这个是5.7版本的降序索引创建,可以看出是不生效的
mysql 5.7> CREATE TABLE t1 (a INT, b INT, INDEX a_desc_b_asc (a DESC, b ASC));
Query OK, 0 rows affected (0.47 sec)
mysql 5.7> SHOW CREATE TABLE t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
KEY `a_desc_b_asc` (`a`,`b`) <-- Order is not preserved
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
- 这个是8.0以后版本增加降序索引的信息
mysql 8.0> CREATE TABLE t1 (a INT, b INT, INDEX a_desc_b_asc (a DESC, b ASC));
Query OK, 0 rows affected (0.47 sec)
mysql 8.0> show create table t1;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| t1 | CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
KEY `a_desc_b_asc` (`a` DESC,`b`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
降序索引的限制
- 1.只能用于innodb存储引擎
- 如果索引包含降序索引键列或主键包含降序索引列,则二级索引不支持更改缓冲。
- InnoDBSQL 解析器不使用降序索引 。
- 2.可用升序索引的所有数据类型都支持降序索引
- 3.降序键部分的索引不用于 MIN()/MAX() 全部数据的聚合操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏