MySQL 8.0 新特性:Descending Indexes

文若3年前技术文章1011


一、前言

MySQL 8.0 之前的索引排序规则之前只允许 ASC 存储,创建时指定 DESC 也会被忽略,

截屏2021-01-14 上午10.59.32.png

截屏2021-01-13 下午5.38.01.png

8.0 版本为我们带来了 Descending Indexes 降序索引 👏👏👏

只能使用 ASC 索引,带来的问题就是使用 DESC 会出现更多的 using filesort 导致更多的性能损耗

二、动手实验 5.7

  1. 5.7 版本用了一张推荐系统的表,简单测试一下:

explain select similarity from new_correlation group by similarity order by similarity asc ;

Snipaste_2021-01-13_17-57-29.png

此时我们是在 5.7 版本里创建了一个 idx_similarity_desc(similarity desc)  发现虽然创建的是倒序索引,但是没有效果,依然是按照 ASC 组织的。下面是使用 DESC 排序下 SQL 的执行计划:

explain select similarity from new_correlation group by similarity order by similarity desc \G

Snipaste_2021-01-13_18-04-51.png

此时是在 5.7 版本下使用倒序 DESC 我们从执行计划里发现比 ASC 多了 Using temporaryfilesort 使用临时表和文件排序,一般我们认为执行计划中有这两个的性能都不咋地,而且执行频率高的话系统 IO 的压力也会非常大,比如羽勒的内站系统数据库,配置只有 2C4G 有一个业务必须使用 DESC 排序,并发上来时 CPU 可以顶得住 IOPS 却已经到极限了。


那么到底是有多大区别呢?请继续往下看


我们使用 MySQL 执行监控计数器看看二者的区别~

下方是使用 ASC 时的计数器 Handler_read_key 较高说明查询及索引均使用正确。

Snipaste_2021-01-13_19-21-35.png

下面是使用 DESC 时计数器,发现多了很多计数 Handler_read_rnd_next 从数据节点读取到下一个数据节点的次数,说明索引使用不正常,消耗的资源也是比 ASC 大许多。

Snipaste_2021-01-13_19-22-21.png

我们可以看到 5.7 即使我们创建 DESC 索引但是依然是按照 ASC 排序的,某些情况下是比较消耗性能的。

Snipaste_2021-01-13_19-29-18.png

三、8.0 新特性改善

我们到 8.0 中重新运行刚才的 SQL 我们添加 DESC 索引

alter table new_correlation add index idx_similarity_desc(similarity desc);

Snipaste_2021-01-13_19-35-44.png

发现 Using temporaryfilesort 已经没有了,使用了 idx_similarity_desc 索引,统计信息如下👇 创建的倒序索引不再失效。

Snipaste_2021-01-13_19-37-39.png

后面我们可以根据业务情况创建合适组织顺序的索引,减少更多不必要的性能损耗。

相关文章

Flume使用案例之监控端口数据

监控端口数据目标:Flume监控一端Console,另一端Console发送消息,使被监控端实时显示。分步实现:1. 安装telnet工具yum -y install telnet2. 创建Flume...

配置ranger后hive注册永久UDF

配置ranger后hive注册永久UDF

背景:由于有些场景在启用Ranger情况下,客户在分配权限时候对高权限有特别要求,尽可能给用户设置低权限,无法在ranger中设置用户为 is Role admin权限(hive管理员权限)操作流程:...

bind服务-1

bind服务-1

DNS:域名系统(英文:Domain Name System)是一个域名系统,是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP...

shell编程基础(二)

1、条件表达式1.1 文件判断常用文件测试操作符:-d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立-f文件,f的全拼为file 文件存在且为普通文件则为真,即测试表达式...

企业级大数据安全架构(十)

企业级大数据安全架构(十)

一、DBeaver连接Kerberos认证下的hive1.配置本地hosts因为Kerberos认证过程及集群服务中,很多是以主机名的形式进行访问的,所以工作机要设置hosts. 域名映射,我们通过部...

kubernetes实战详解

kubernetes实战详解

一、k8s是什么?1、Kubernetes 是用于自动部署,扩展和管理容器化应用程序的开源系统2、生产级别的容器编排系统3、PaaS平台二、容器是什么?或者说docker是什么?1、容器就是一个沙箱C...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。