MySQL8新增降序索引

MySQL8新增降序索引

桃花坞里桃花庵,桃花庵里桃花仙。桃花仙人种桃树,又摘桃花卖酒钱。

一、MySQL5.7 降序索引

MySQL 在语法上很早就已经支持降序索引,但实际上创建的却仍然是升序索引,如下MySQL 5.7 所示,row 2 字段降序,但是从show create table 看 row 2 仍然是升序的。

CREATE TABLE t_desc_index ( row1 INT, row2 INT, INDEX idx_row1_row2 ( row1, row2 DESC ) );

SHOW CREATE TABLE t_desc_index

MySQL8新增降序索引

二、MySQL8 降序索引

在MySQL8 中,以同样的方式创建降序索引row2,show create table查看。

SHOW CREATE TABLE t_desc_index\G 看到 KEY 'idx_row1_row2'('row1','row2' DEDC)

8.0中可以看到,row2字段降序,此时为降序索引。

MySQL8新增降序索引

三、新增降序索引有何好处?

通过降序索引在执行计划中的表现,在 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;

MySQL8新增降序索引

从 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 新增降序索引后可以真正意义上的增加查询效率。

桃花坞里桃花庵

桃花庵里桃花仙

桃花仙人种桃树

又摘桃花卖酒钱

Original: https://www.cnblogs.com/taojietaoge/p/16223469.html
Author: 涛姐涛哥
Title: MySQL8新增降序索引

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611896/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL实战45讲 14

    14 | count(*)这么慢,我该怎么办? 在开发系统的时候,你可能经常需要 计算一个表的行数,比如一个交易系统的所有变更记录总数。 随着系统中记录数越来越多,select c…

    数据库 2023年6月16日
    0101
  • mysql多表关联时可能出错的地方,如搜索出的记录数据变少了。

    当多个表相关联时,就会出现此问题。 [En] This problem occurs when multiple tables are associated.例如其中单位串以单位表…

    数据库 2023年5月24日
    080
  • WIN10下启动VMware虚拟机蓝屏的解决办法

    问题: 每次启动虚拟机就会蓝屏,提示错误代码: PAGE_FAULT_IN_NONPAGED_AREA 解决办法: 禁用 Hyper-V 功能 打开”控制面板&#821…

    数据库 2023年6月14日
    087
  • java四种访问修饰符及各自的权限

    1.public,即共有的,是访问权限限制最宽的修饰符。被public修饰的类、属性、及方法不仅可以跨类访问,而且可以跨包访问。 2. protected,即保护访问权限,是介于p…

    数据库 2023年6月11日
    091
  • 设计模式之(11)——享元模式

    继续把我们的设计模式捡起,希望我能坚持完这个系列吧,下面我们就进入正题吧。 在软件开发过程中,我们需要重复使用某个对象的时候,如果重复地new这个对象,不停地申请内存空间,会造成内…

    数据库 2023年6月14日
    071
  • python中set()函数的用法

    set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。 set([iterable]) iterable — 可迭代对象…

    数据库 2023年6月11日
    078
  • 开源者的自我修养|为 ShardingSphere 贡献了千万行代码的程序员,后来当了 CEO

    当一个人处在持续地追求与锋锐地思索状态中,他将收获怎样的价值与自由? 有人说,敲过万行代码的程序员,可以写一份基础版入行指南,给初阶人群作入门参考。码过十万行代码的程序员,能写一本…

    数据库 2023年6月16日
    0106
  • Linux 服务管理

    Linux 服务管理 1. 基本介绍 服务的本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如mysqld,sshd,防火墙等,因此我们又称为守护线程…

    数据库 2023年6月6日
    095
  • Stripe支付介绍在asp.net mvc中开发对接,图文加代码说明

    最近一个国外的电商项目,需要对接支付功能,国内的支付一般使用微信支付、支付宝、银联等等,但国际上一般使用Paypal、Skrill、BrainTree、Stripe等,经过内部综合…

    数据库 2023年6月14日
    0106
  • Linux 实用命令

    实用命令: 1、查看端口占用情况 &#x67E5;&#x770B;&#x8BE5;&#x7AEF;&#x53E3;&#x662F;&…

    数据库 2023年6月16日
    076
  • MySQL主从复制

    一、概述 主从复制是指将主数据库(Master)的DDL和DML操作通过二进制日志传到从库(Slave)服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数…

    数据库 2023年5月24日
    0105
  • Redis-数据结构

    Redis key-value结构组织 首先,Redis使用了一个全局哈希表来保存所有的键值对。这个全局哈希表,也就是一个存放哈希桶(entry)的数组。Redis可以用哈希算法算…

    数据库 2023年6月11日
    080
  • Element UI的第一个程序(标签使用)

    1:Element UI 官方文档:https://element.faas.ele.me/ 2:Element UI是什么? 网站快速成型工具 *Element,一套为开发者、设…

    数据库 2023年6月6日
    099
  • mybatis-plus详细讲解

    本文笔记都是观看狂神老师视频手敲的,视频地址:https://www.bilibili.com/video/BV17E411N7KN 学java后端的都可以去看一下,从基础到架构很…

    数据库 2023年6月14日
    091
  • mysqldump 在 StoneDB 中的使用注意事项

    此场景是利用mysqldump从InnoDB导出,然后再导入StoneDB,在导入StoneDB前,需要对导出文件做如下修改。1)修改存储引擎 CREATE TABLE t_use…

    数据库 2023年5月24日
    096
  • clash TUN模式

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月14日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球