龙空技术网

一文看懂mysql、mariadb与percona server在谓词推入的性能差异

波波说运维 140

前言:

而今大家对“mysqlmariadb区别”大体比较看重,朋友们都需要剖析一些“mysqlmariadb区别”的相关文章。那么小编同时在网摘上汇集了一些对于“mysqlmariadb区别””的相关知识,希望看官们能喜欢,同学们一起来学习一下吧!

概述

前面介绍一键部署脚本其实就是为这个实验做一个铺垫,最近有个项目在用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方面的内容,感兴趣的朋友可以关注下~

标签: #mysqlmariadb区别