mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异
mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异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_unit WHERE `load` = TRUE GROUP BY unit_no三、mysql5.7测试谓词推入1、测试查询视图耗时这里先统一建立视图,后面直接调用做比较。2、建库并导入单表数据单表数据量大约在80万。3、建立视图
概述前面介绍一键部署脚本其实就是为这个实验做一个铺垫,最近有个项目在用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_unit
WHERE
`load` = TRUE
GROUP 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方面的内容,感兴趣的朋友可以关注下~