概述前面介绍一键部署脚本其实就是为这个实验做一个铺垫,最近有个项目在用mysql5.7时发现由于不支持谓词推入功能,部分操作都很慢,经常发生阻塞现象,因为该项目用了很多视图来支持业务的一些操作,所以就打算换数据库来看一下性能有没提升,故有了以下针对mysql5.7、mysql8.0、percona server mysql8、mariadb10.4对谓词推入的性能比较。
一、基础参数配置因为我都写在一键部署脚本了,所以该参数都是按以下标准事先设置好~
二、环境准备1、分别部署mysql5.7、mysql8.0、percona server mysql8、mariadb10.4四个版本的数据库
略,参考一键部署脚本
2、建库并导入单表数据
单表数据量大约在80万。
3、建立视图
这里先统一建立视图,后面直接调用做比较。
create view t as SELECT unit_no, origin, dest, load_user, load_time, unload_user, unload_time, MAX(CASE WHEN unload = TRUE THEN unload_time ELSE load_time END)FROM fsl_order_movement_unitWHERE `load` = TRUEGROUP BY unit_no
三、mysql5.7测试谓词推入1、测试查询视图耗时
第一次查询在11s,后面多次查询稳定在8s
select * from t where unit_no = '1810336177913';
2、查看执行计划
未实现谓词推入,实际上先走了全表扫描,然后再去filter
四、mysql8.0测试谓词推入1、测试查询视图耗时
查询稳定在11s
select * from t where unit_no = '1810336177913';
2、查看执行计划
执行计划无明显变化,先做全表扫描,在filter
五、Percona Server for MySQL 8.0测试谓词推入1、测试查询视图耗时
第一次查询在6s,后面多次查询稳定在5s
select * from t where unit_no = '1810336177913';
2、查看执行计划
执行计划没变,先做全表扫描,在filter
explain select * from t where unit_no = '1810336177913';
六、mariadb10.4测试谓词推入1、测试查询视图耗时
第一次查询在6s,后面多次查询稳定在5s
select * from t where unit_no = '1810336177913';
2、查看执行计划
可以发现执行计划发生了改变,这里已经用到了索引,并不做全表扫描。
explain select * from t where unit_no = '1810336177913';
七、结论结论如下:
由于只有mariadb才支持这个特性,所以先用mariadb数据库去替换目前的5.7版本,下一步进行整体的功能测试,看一下效果。
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~