MySQL8新增降序索引[亲测有效]

MySQL8新增降序索引[亲测有效]MySQL8新增降序索引 桃花坞里桃花庵,桃花庵里桃花仙。桃花仙人种桃树,又摘桃花卖酒钱。 一、MySQL5.7 降序索引 MySQL在语法上很早就已经支持降序索引,但实际上创建的却仍然是升序索引,如

MySQL8新增降序索引

MySQL8新增降序索引

 

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

 

一、MySQL5.7 降序索引

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

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_indexG 看到 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

这种情况下只需要扫描 行数据

explain select row1, row2 from t_desc_index order by row1 desc , row2  desc limit 5 ;

MySQL8新增降序索引[亲测有效]

综上可知,MySQL8新增降序索引后可以真正意义上的增加查询效率。

 

 

 

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

 

原文地址:https://www.cnblogs.com/taojietaoge/archive/2022/05/08/16223469.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5295.html

(0)
上一篇 2023-05-15
下一篇 2023-05-15

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注