MySQL8新增降序索引

database

MySQL8新增降序索引

 

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

 

一、MySQL5.7 降序索引

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

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 ( ) BEGIN

DECLARE

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

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

explain select row1, row2 from t_desc_index orderby row1 desc , row2  desc limit 5 ;

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

 

 

 

桃花坞里桃花庵

桃花庵里桃花仙

桃花仙人种桃树

又摘桃花卖酒钱

 

以上是 MySQL8新增降序索引 的全部内容, 来源链接: utcz.com/z/536487.html

回到顶部