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 中,以同样的方式创建降序索引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 。
降序索引只对查询中的特定排序顺序有效,即升序索引的降序无效,降序索引的升序无效。如果使用不当,查询效率会降低。例如,上述查询排序条件将更改为
[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 新增降序索引后可以真正意义上的增加查询效率。
桃花坞里桃花庵
桃花庵里桃花仙
桃花仙人种桃树
又摘桃花卖酒钱
Original: https://www.cnblogs.com/taojietaoge/p/16223469.html
Author: 涛姐涛哥
Title: MySQL8新增降序索引
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505401/
转载文章受原作者版权保护。转载请注明原作者出处!