MySQL8新增降序索引
MySQL8新增降序索引
桃花坞里桃花庵,桃花庵里桃花仙。桃花仙人种桃树,又摘桃花卖酒钱。
一、MySQL5.7 降序索引
MySQL在语法上很早就已经支持降序索引,但实际上创建的却仍然是升序索引,如下MySQL 5.7 所示,row2字段降序,但是从show create table看 row2 仍然是升序的。
CREATETABLE t_desc_index ( row1 INT, row2 INT, INDEX idx_row1_row2 ( row1, row2 DESC ) );SHOW
CREATETABLE t_desc_index
二、MySQL8 降序索引
在MySQL8中,以同样的方式创建降序索引row2,show create table查看。
SHOW CREATETABLE t_desc_indexG 看到 KEY ‘idx_row1_row2’(‘row1’,’row2’ DEDC)
8.0中可以看到,row2字段降序,此时为降序索引。
三、新增降序索引有何好处?
通过降序索引在执行计划中的表现,在 t_desc_index 表插入10万条随机数据,在通过 explain 查看各自版本的执行计划。
1、数据准备
插入99999条随机数据,存储过程
CREATEPROCEDURE insert_t_desc_index ( ) BEGINDECLARE
i INTDEFAULT1;
WHILE
i <100000 DO
INSERTINTO t_desc_index SELECT
rand( ) *100000,
rand( ) *100000;
SET i = i +1;
ENDWHILE;
COMMIT;
END;
调用存储过程插入数据。
CALL insert_t_desc_index ( );
2、测试
查询五条数据,根据索引 idx_row1_row2 按照降序顺序排序。
explain select row1, row2 from t_desc_index orderby row1 , row2 desc limit 5;
从 explain 解释可以看出,查询五条数据,需要扫描96491 行数据,并且使用了filesort。
降序索引只是对查询中特定的排序顺序有效,即升序索引降序排序反无效,降序索引升序排序无效。如果使用不当,反而查询效率更低,比如上述查询排序条件改为
order by c1 desc, c2 desc
这种情况下只需要扫描 5 行数据:
explain select row1, row2 from t_desc_index orderby row1 desc , row2 desc limit 5 ;
综上可知,MySQL8新增降序索引后可以真正意义上的增加查询效率。
桃花坞里桃花庵
桃花庵里桃花仙
桃花仙人种桃树
又摘桃花卖酒钱
以上是 MySQL8新增降序索引 的全部内容, 来源链接: utcz.com/z/536487.html