• 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中,以同样的方式创建降序索引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

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

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

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

    桃花坞里桃花庵
    桃花庵里桃花仙
    桃花仙人种桃树
    又摘桃花卖酒钱
  • 相关阅读:
    blog网页模版
    Sidebyside assembly
    几种hash算法
    [软件调试学习笔记]防止栈缓冲区溢出的基于Cookie的安全检查机制
    erlang注意(经典)
    erlang 的源代码保护机制(经典)
    erlang 的源代码保护机制(经典)
    java反编译工具jad
    erlang注意(经典)
    java反编译工具jad
  • 原文地址:https://www.cnblogs.com/taojietaoge/p/16223469.html
Copyright © 2020-2023  润新知