MySQL 8从零开始学(视频教学版)
上QQ阅读APP看书,第一时间看更新

5.4 MySQL 8.0的新特性1——支持降序索引

在MySQL 8.0之前,MySQL在语法上已经支持降序索引,但实际上创建的仍然是升序索引。

下面通过案例来对比不同的版本中对降序索引的支持情况。

分别在MySQL 5.7版本和MySQL 8.0版本中创建数据表ts1,结果如下:

在MySQL 5.7版本中查看数据表ts1的结构,结果如下:

从结果可以看出,索引仍然是默认的升序。

在MySQL 8.0版本中查看数据表ts1的结构,结果如下:

从结果可以看出,索引已经是降序了。下面继续测试降序索引在执行计划中的表现。

分别在MySQL 5.7版本和MySQL 8.0版本的数据表ts1中插入8万条随机数据,执行语句如下:

在MySQL 5.7版本中查看数据表ts1的执行计划,结果如下:

从结果可以看出,执行计划中扫描数为79999,而且使用了Using filesort。

提示

Using filesort是MySQL中一种速度比较慢的外部排序,能避免是最好的结果。多数情况下,管理员可以通过优化索引来尽量避免出现Using filesort,从而提高数据库执行速度。

在MySQL 8.0版本中查看数据表ts1的执行计划,结果如下:

从结果可以看出,执行计划中扫描数为5,而且没有使用Using filesort。

注意

降序索引只对查询中特定的排序顺序有效,如果使用不当,反而查询效率更低。例如,上述查询排序条件改为order by a desc, b desc,MySQL 5.7的执行计划要明显好于MySQL 8.0。

将排序条件修改为order by a desc, b desc后,下面来对比不同版本中执行计划的效果。

在MySQL 5.7版本中查看数据表ts1的执行计划,结果如下:

在MySQL 8.0版本中查看数据表ts1的执行计划,结果如下:

从结果可以看出,修改后MySQL 5.7的执行计划要明显好于MySQL 8.0。