MySQL8新增降序索引
MySQL8新增降序索引
桃花坞里桃花庵,桃花庵里桃花仙。桃花仙人种桃树,又摘桃花卖酒钱。
一、MySQL5.7 降序索引
MySQL在语法上很早就已经支持降序索引,但实际上创建的却仍然是升序索引,如下MySQL 5.7 所示,row2字段降序,但是从show create table看 row2 仍然是升序的。
CREATE TABLE t_desc_index ( row1 INT, row2 INT, INDEX idx_row1_row2 ( row1, row2 DESC ) ); SHOW CREATE TABLE t_desc_index

二、MySQL8 降序索引
在MySQL8中,以同样的方式创建降序索引row2,show create table查看。
SHOW CREATE TABLE t_desc_index\G 看到 KEY ‘idx_row1_row2’(‘row1’,’row2’ DEDC)
8.0中可以看到,row2字段降序,此时为降序索引。

三、新增降序索引有何好处?
通过降序索引在执行计划中的表现,在 t_desc_index 表插入10万条随机数据,在通过 explain 查看各自版本的执行计划。
1、数据准备
插入99999条随机数据,存储过程
CREATE PROCEDURE insert_t_desc_index ( ) BEGIN
DECLARE
i INT DEFAULT 1;
WHILE
i < 100000 DO
INSERT INTO t_desc_index SELECT
rand( ) * 100000,
rand( ) * 100000; SET i = i + 1; END WHILE;
COMMIT;
END;
调用存储过程插入数据。
CALL insert_t_desc_index ( );
2、测试
查询五条数据,根据索引 idx_row1_row2 按照降序顺序排序。
explain select row1, row2 from t_desc_index order by row1 , row2 desc limit 5;

从 explain 解释可以看出,查询五条数据,需要扫描96491 行数据,并且使用了filesort。
降序索引只是对查询中特定的排序顺序有效,即升序索引降序排序反无效,降序索引升序排序无效。如果使用不当,反而查询效率更低,比如上述查询排序条件改为
order by c1 desc, c2 desc
这种情况下只需要扫描 5 行数据:
explain select row1, row2 from t_desc_index order by row1 desc , row2 desc limit 5 ;

综上可知,MySQL8新增降序索引后可以真正意义上的增加查询效率。
MySQL8新增降序索引的更多相关文章
- MySQL 8 新特性之降序索引
MySQL 8.0终于支持降序索引了.其实,从语法上,MySQL 4就支持了,但正如官方文档所言,"they are parsed but ignored",实际创建的还是升序索引 ...
- [20181124]关于降序索引问题3.txt
[20181124]关于降序索引问题3.txt --//链接:blog.itpub.net/267265/viewspace-2221425/,探讨降序索引中索引的键值.--//实际上使用函数sys_ ...
- [20181124]关于降序索引问题2.txt
[20181124]关于降序索引问题2.txt --//链接:blog.itpub.net/267265/viewspace-2221425/,探讨降序索引中索引的键值.--//实际上使用函数sys_ ...
- [20191218]降序索引疑问4.txt
[20191218]降序索引疑问4.txt --//前几天优化一个项目,我发现许多表里面有有隐含字段,一般开发很少建立函数索引.我自己检查发现里面存在大量的降序索引.--//我感觉有点奇怪,为什么开发 ...
- [20190910]关于降序索引问题5.txt
[20190910]关于降序索引问题5.txt --//测试了索引TERM使用0xfe表示,回想到以前遇到降序索引的特殊字符编码问题,现在可是忘得一干二净.--//现在想想当时自己怎么猜测出来的,^_ ...
- 谈谈MySQL中的降序索引 order by id DESC / ASC
今天这篇主要讲order by 语句中的多个字段asc desc的问题.mysql5中,索引存储的排序方式是ASC的,没有DESC的索引.现在能够理解为啥order by 默认是按照ASC来排序的了吧 ...
- 选取两个有序数组中最大的K个值,降序存入另一个数组中
原题: 假设有两个有序的整型数组int *a1, int *a2,长度分别为m和n.试用C语言写出一个函数选取两个数组中最大的K个值(K可能大于m+n)写到int *a3中,保持a3降序,并返回a3实 ...
- JS实现数组排序:升序和降序
如果指明了 compareFunction ,那么数组会按照调用该函数的返回值排序.即 a 和 b 是两个将要被比较的元素: 如果 compareFunction(a, b) 小于 0 ,那么 a 会 ...
- C++员工管理系统(封装+多态+继承+分类化+函数调用+读写文件+指针+升序降序算法等一系列知识结合)
1 C++职工管理系统 2 该项目实现 八个 功能 3 1-增加功能 2-显示功能 3-删除功能 4-修改功能 4 5-查找功能 6-排序功能 7-清空功能 8-退出功能 5 实现多个功能使用了多个C ...
随机推荐
- 什么是消费者驱动的合同(CDC)?
这基本上是用于开发微服务的模式,以便它们可以被外部系统使用.当我们处理 微服务时,有一个特定的提供者构建它,并且有一个或多个使用微服务的消费者. 通常,提供程序在 XML 文档中指定接口.但在消费者驱 ...
- eclipse更换工作空间后,需要修改哪些常用配置
一.对于配置不太了解,第一次配置. 常用 (ps:配置我们在导航栏的 Windows --> preference 里进行配置) 1.首先,我们配置编译环境:Java --> Instal ...
- centos 安装solr6
1.到solr官网下载.tgz 结尾的文件 2.tar zxvf solr*.tgz 解压文件 3.进入solr的解压目录里的bin目录 执行 ./solr start -force 执行成功后 可访 ...
- Unsafe Rust 能做什么
在不安全的 Rust 中唯一不同的是,你可以: 对原始指针进行解引用 调用"不安全"的函数(包括 C 函数.编译器的内建指令和原始分配器. 实现"不安全"的特性 ...
- ESD@TVS选型
一.工作原理 ESD ESD静电保护元件,又称静电抑制二极管.ESD是多个TVS晶粒或二极管采用不同的布局做成具有特定功能的多路或单路ESD保护器件,主要应用于各类通信接口静电保护,如USB.HDMI ...
- Mpvue 小程序转 Web 实践总结
介绍 Mpvue 是一个使用 Vue.js 开发小程序的前端框架.框架基于 Vue.js 核心,修改了 Vue.js 的 runtime 和 compiler 实现,使其可以运行在小程序环境中,从而为 ...
- 如何跨线程访问Winform中的UI元素
如何跨线程访问Winform中的UI元素 假如制作一个Socket聊天应用程序,很可能会用到多线程: 例如为Receive方法开辟单独一个线程,例如为Receive方法开辟单独一个线程(后台运行的线程 ...
- .NET程序设计实验三
实验三 Windows 应用程序开发 一.实验目的 1. 掌握窗口控件的使用方法: 2. 掌握Windows 的编程基础. 二.实验要求 根据要求,编写 C#程序,并将程序代码和运行结果写入实验报告 ...
- webpack 4.0 配置方法以及错误解决
选取一个空目录来试验 全局安装webpack4.1之后 创建目录 mkdir webpacktest && cd webpacktes 初始化package.json npm init ...
- 【Java分享客栈】SpringBoot整合WebSocket+Stomp搭建群聊项目
前言 前两周经常有大学生小伙伴私信给我,问我可否有偿提供毕设帮助,我说暂时没有这个打算,因为工作实在太忙,现阶段无法投入到这样的领域内,其中有两个小伙伴又问到我websocket该怎么使用,想给自己的 ...