快捷搜索:  汽车  科技

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对谓词推入的性能比较。


一、基础参数配置

因为我都写在一键部署脚本了,所以该参数都是按以下标准事先设置好~

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(1)


二、环境准备

1、分别部署mysql5.7、mysql8.0、percona server mysql8、mariadb10.4四个版本的数据库

略,参考一键部署脚本

2、建库并导入单表数据

单表数据量大约在80万。

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(2)

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

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(3)


三、mysql5.7测试谓词推入

1、测试查询视图耗时

第一次查询在11s,后面多次查询稳定在8s

select * from t where unit_no = '1810336177913';

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(4)

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(5)

2、查看执行计划

未实现谓词推入,实际上先走了全表扫描,然后再去filter

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(6)


四、mysql8.0测试谓词推入

1、测试查询视图耗时

查询稳定在11s

select * from t where unit_no = '1810336177913';

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(7)

2、查看执行计划

执行计划无明显变化 先做全表扫描,在filter

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(8)


五、Percona Server for MySQL 8.0测试谓词推入

1、测试查询视图耗时

第一次查询在6s,后面多次查询稳定在5s

select * from t where unit_no = '1810336177913';

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(9)

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(10)

2、查看执行计划

执行计划没变,先做全表扫描,在filter

explain select * from t where unit_no = '1810336177913';

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(11)


六、mariadb10.4测试谓词推入

1、测试查询视图耗时

第一次查询在6s,后面多次查询稳定在5s

select * from t where unit_no = '1810336177913';

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(12)

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(13)

2、查看执行计划

可以发现执行计划发生了改变,这里已经用到了索引,并不做全表扫描。

explain select * from t where unit_no = '1810336177913';

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(14)


七、结论

结论如下:

由于只有mariadb才支持这个特性,所以先用mariadb数据库去替换目前的5.7版本,下一步进行整体的功能测试,看一下效果。

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(15)


觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

mysqllimit详解,一文看懂mysqlmariadb与perconaserver在谓词推入的性能差异(16)

猜您喜欢: