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 。

降序索引只对查询中的特定排序顺序有效,即升序索引的降序无效,降序索引的升序无效。如果使用不当,查询效率会降低。例如,上述查询排序条件将更改为

[En]

The descending index is only valid for the specific sort order in the query, that is, the descending sort of the ascending index is invalid, and the ascending sort of the descending index is invalid. If it is not used properly, the query efficiency will be lower. For example, the above query sorting conditions will be changed to

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/505401/

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

(0)

大家都在看

  • MySQL实现 group_concat 排序

    MySQL支持实现group_concat() 内部自定义排序: 实例: 新建一张表 reward,表中数据如下: SQL: SELECT uid, GROUP_CONCAT(mo…

    数据库 2023年6月14日
    090
  • Javascript中“==”与“===”的区别

    在Javascript中有”==”和”===”两种比较运行符,那么他们有什么区别呢? 一、对于string,number等基础类型,…

    数据库 2023年6月9日
    092
  • [LeetCode]1464. 数组中两元素的最大乘积

    给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。 请你计算并返回该式的最大值。 示例 1: 输入…

    数据库 2023年6月9日
    077
  • 容器化 | 在 S3 实现定时备份

    让我们来看看该功能是如何使用的。 [En] Let’s take a look at how this feature is used. 可用 Cron 表达式(与 L…

    数据库 2023年5月24日
    071
  • PHP array_count_values()

    array_count_values array_count_values() 函数用于统计数组中所有值出现的次数。 本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数…

    数据库 2023年6月14日
    075
  • mysql多实例部署

    在MySQL中配置多实例 1.软件下载 2.配置用户和组并解压二进制程序至/usr/local下 3.创建各实例数据存放的目录 4.初始化各示例 5.配置配置文件/etc/my.c…

    数据库 2023年5月24日
    092
  • [Unity]如何解决带刚体的物体在墙角会穿墙的问题

    问题背景 当一个物体在两个带碰撞体的方块组成的墙角时,只要”挤一挤”就可以从墙角穿墙而过: 原因分析 根据【Unity】Rigidbody.velocity…

    数据库 2023年6月16日
    0171
  • 台湾停电公司竟要求手写代码,网友:就无语

    背景 3月3日上午9点左右,中国台湾省突然毫无预警地大面积停电,高雄市车流量最多的街道里,至少有191处红绿灯不亮,此事严重影响了人民的生活。 不少台湾民众在推特上吐槽,乌克兰战乱…

    数据库 2023年6月9日
    096
  • 【黄啊码】linux利用lvs+Keepalived实现负载均衡

    负载均衡:两台(一主一备) LVS + Keepalived+三台HTTP服务器 这是我的第一台HTTP服务器【这里使用的是现成lnmp,然后复制出三台一模一样的】 在每台(HTT…

    数据库 2023年6月16日
    0102
  • MySQL数据库的创建、删除和备份

    总结MySQL数据库的创建、删除和备份操作 MySQL数据库的创建、删除和备份 数据库的创建 //使用指令创建数据库 CREATE DATABASE yjh_db01; //创建一…

    数据库 2023年6月16日
    086
  • AQS源码阅读

    AQS-获取资源: AQS-释放资源: posted @2022-06-22 17:07 無名之徒 阅读(9 ) 评论() 编辑 Original: https://www.cnb…

    数据库 2023年6月16日
    0101
  • 定时调度的线程池

    定时调度线程池 当我们需要定时进行线程的调度 @Slf4j public class Test5 { public static void main(String[] args) …

    数据库 2023年6月11日
    081
  • linux常用命令(持续更新中…)

    查看所有开机启动服务:systemctl list-unit-files # 按Enter翻页 查看所有开机启动服务:systemctl list-unit-files | gre…

    数据库 2023年6月14日
    080
  • MySQL实战45讲 19

    19 | 为什么我只查一行的语句,也执行这么慢? 有些情况下,”查一行”,也会执行得特别慢。 需要说明的是,如果 MySQL 数据库本身就有很大的压力,导致…

    数据库 2023年5月24日
    060
  • Redis-内存淘汰策略

    策略分类 内存写满了怎么办?Redis提供了以下几种内存淘汰的策略: No eviction 不淘汰数据 即,内存写满后,再有写请求时,Redis直接返回错误,不会提供服务。这也是…

    数据库 2023年6月11日
    087
  • java se 高级基础

    接口 继承树 Collection接口 Map接口 Collection 接口 Collection接口:单列集合,用来存储一个一个的对象 List接口:extends Colle…

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