博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MYSQL 8 VS MYSQL 5.7 查询真的“快乐”吗?
阅读量:2169 次
发布时间:2019-05-01

本文共 1508 字,大约阅读时间需要 5 分钟。

对没错字,就是快乐吗?最近不少单位开始使用MYSQL 8了,当然也是尝试性的,大面积的铺开应该在明年,MYSQL8 目前在MGR 的变动还是蛮大的。

这里主要想看看到底MYSQL 8 在查询优化方面到底比MYSQL 5.7 有什么进步,或什么期待,是否和官方宣称的提高N倍性能。

测试机 : SSD 硬盘 (两个数据库服务器,装在一个磁盘底下,内存MYSQL 5.7 稍微吃点亏 6G  MYSQL 8 8G的内存,其他 CPU 4核心,在一个虚拟机里面,虚拟机里面没有其他的机器了,就只有这两个)

下面写一些蹩脚的语句,并且适当的添加一些不大合理的索引,看看他们的表现如何

(如果你不熟悉表结构,可以去下载MYSQL官方的测试库 employees)

语句一, 这个语句其实是很 蹩脚的,

select em.emp_no,em.gender,ts.title

from employees as em

left join titles as ts on em.emp_no = ts.emp_no

where em.emp_no in (select emp_no from titles where to_date = '9999-01-01');

尤其下面的子查询,简直是找抽类型的。

在同样配置的MYSQL 服务器,仅仅是MYSQL的版本不同,一个是 MYSQL 5.7.23 一个是 MYSQL 8.015

对上面的语句查询的执行计划是一样的,但查询的时间稍有不同,MYSQL 5.7 略占优势。这让我有点奇怪。

下图是MYSQL 8

mysql 5.7

下面这个语句很简单,最后的结果还是MYSQL5.7 稍微快了那么一点点

select *

from employees as em where birth_date > '1953-09-01' and em.last_name = 'Facello' 

mysql 8

MYSQL5.7

做到下面这个语句,我有点不淡定了,说好的MYSQL 8 的性能呢,三次比较均不如MYSQL 5.7 ,我在想是我哪里做错了

select * 

from employees as em where em.birth_date > '1953-02-01' or birth_date < '1980-01-01';

mysql 8  

mysql 5.7

下面的语句,mysql 8 稍微比MYSQL 5.7快了一点,但执行第二次的时候,结果又反过来了

select *

from employees as em 

left join titles as ti  on em.emp_no = ti.emp_no

left join (select emp_no from salaries where salary > 40000) as sa on em.emp_no = sa.emp_no

mysql 8 

MYSQL 5.7

做到这里,其实MYSQL 8 和 MYSQL 5.7 的执行计划已经不一样了,

MYSQL 5.7  using sort union

MYSQL 8 using union

虽然细节不同,但MYSQL 5.7 还是比MYSQL 8 快那么一丢丢

MYSQL 5.7

最后要使用倒序的方式查询,MYSQL 8 已经支持倒序了,这次应该占便宜了吧?

MYSQL 8

MYSQL 5.7

其实还应该讲实验做的更严谨一点,但此次的粗放型的实验,给我一个不“快乐“ 的感觉,MYSQL 8 到底你在查询中是进步了还是退步了,如果是进步了,那在哪里?

转载地址:http://yhazb.baihongyu.com/

你可能感兴趣的文章
走进JavaWeb技术世界1:JavaWeb的由来和基础知识
查看>>
走进JavaWeb技术世界2:JSP与Servlet的曾经与现在
查看>>
走进JavaWeb技术世界3:JDBC的进化与连接池技术
查看>>
走进JavaWeb技术世界4:Servlet 工作原理详解
查看>>
走进JavaWeb技术世界5:初探Tomcat的HTTP请求过程
查看>>
走进JavaWeb技术世界6:Tomcat5总体架构剖析
查看>>
走进JavaWeb技术世界7:Tomcat和其他WEB容器的区别
查看>>
走进JavaWeb技术世界9:Java日志系统的诞生与发展
查看>>
走进JavaWeb技术世界10:从JavaBean讲到Spring
查看>>
走进JavaWeb技术世界11:单元测试框架Junit
查看>>
走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven
查看>>
走进JavaWeb技术世界13:Hibernate入门经典与注解式开发
查看>>
走进JavaWeb技术世界14:Mybatis入门
查看>>
走进JavaWeb技术世界16:极简配置的SpringBoot
查看>>
初探Java设计模式1:创建型模式(工厂,单例等)
查看>>
初探Java设计模式2:结构型模式(代理模式,适配器模式等)
查看>>
初探Java设计模式3:行为型模式(策略,观察者等)
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>