博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MYSQL 中的查询技巧 与 MYSQL 8 并行查询
阅读量:2169 次
发布时间:2019-05-01

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

最近公司的系统一点点的开始了拆分,从ORACLE 转移到 MYSQL 中,部分程序员的想法在使用MYSQL中还是没有转变过来,直接将ORALCE中的查询语句直接搬到了MYSQL。使用MYSQL 重要的两点,1 逻辑上移,数据库不在是承担你逻辑的第一选择,程序的比重将变得更重要 2 数据库容器化,数据库将变得不再那么重要,而是仅仅是承载数据的地方,或者甚至高级的设计,数据库将变得可有可无,这当然也的和业务挂钩,不是放之四海都OK。

这就直接抛出一个问题,就是MYSQL的查询技巧还重要吗?当然如果你还要用MYSQL 来进行数据库的提取和查询,那就必须重视MYSQL的查询技巧。

下图是以 mysql 8.015 这个版本作为语句执行的基础

其实两条语句查询的结果是一样的,仅仅是写法不一样,给出的执行计划就是不一样的

以目前最新版本的MYSQL来说,从上面的例子里面,还是要鼓励直接查询,尽量避免子查询。当然如果子查询能大幅度的降低参与计算的数据量,则还是可以对比继续使用的。

下面我们可以看看MYSQL 中的index merge 的功能到底能提升查询性能多少

1 我们先关闭index_merge 

很明显,索引都白搭了

2 我们打开index_merge 

明显看到,查询中使用or 的时候index merge 对数据查询的帮助是很大的

实际当中,(SSD 硬盘 440行数据的 fetch 不开启 0.195秒相当于全表扫描,开启0.001秒)

mysql 8 是默认开启的。

3  时间范围对选择索引的影响

下面两条语句对于索引的选择会截然不同,我们建立四个索引

Select * from employees where first_name ='Georgi' or last_name ='Preusig' and birth_date > '1950-01-01' and birth_date < '1950-01-02';

select * from employees where first_name ='Georgi' or last_name ='Preusig' and birth_date > '1950-01-01' ;

从上图可以看出由于时间范围,最后走了不同的索引,后面其实我还做了一些其他的测试,例如将时间的范围扩大,发现目前的MYSQL 8.015 很聪明的走了应该走的索引,看了MYSQL8.0 这个版本的查询优化器要比MYSQL 5.7 进步不少。

最后,我们看看MYSQL 8.0的并行查询,并行查询,其实在 PG, SQL SERVER , ORACLE 中都有,但形式不同,MYSQL 8 之前是没有并行查询这个概念的,MYSQL 8 引入了并行查询,我们看看到底并行查询,对查询有什么帮助。

首先我们将并行度降低到 1 ,默认是 4  查询后,获得的时间是 0.109秒 然后我们将并行度调整为 6 在次查询,获得的时间是 0.062秒

由此可见并行度这个东西,对于查询是有帮助的,尤其count(*)  这样经常被诟病的查询方式也在并行度中获益。

如果你经常观察MYSQL 和 POSTGRESQL ,你就会感到开源数据库越来越强大,留给ORACLE 和 SQL SERVER 这样数据库的时间其实不多了。

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

你可能感兴趣的文章
Leetcode C++《热题 Hot 100-23》3.无重复字符的最长子串
查看>>
Leetcode C++《热题 Hot 100-24》5.最长回文子串
查看>>
Leetcode C++《热题 Hot 100-26》15.三数之和
查看>>
Leetcode C++《热题 Hot 100-28》19.删除链表的倒数第N个节点
查看>>
Leetcode C++《热题 Hot 100-29》22.括号生成
查看>>
Leetcode C++《热题 Hot 100-44》102.二叉树的层次遍历
查看>>
Leetcode C++《热题 Hot 100-47》236.二叉树的最近公共祖先
查看>>
Leetcode C++《热题 Hot 100-48》406.根据身高重建队列
查看>>
《kubernetes权威指南·第四版》第二章:kubernetes安装配置指南
查看>>
Leetcode C++《热题 Hot 100-49》399.除法求值
查看>>
Leetcode C++《热题 Hot 100-51》152. 乘积最大子序列
查看>>
Leetcode C++ 《第181场周赛-1》 5364. 按既定顺序创建目标数组
查看>>
Leetcode C++ 《第181场周赛-2》 1390. 四因数
查看>>
阿里云《云原生》公开课笔记 第一章 云原生启蒙
查看>>
阿里云《云原生》公开课笔记 第二章 容器基本概念
查看>>
阿里云《云原生》公开课笔记 第三章 kubernetes核心概念
查看>>
阿里云《云原生》公开课笔记 第四章 理解Pod和容器设计模式
查看>>
阿里云《云原生》公开课笔记 第五章 应用编排与管理
查看>>
阿里云《云原生》公开课笔记 第六章 应用编排与管理:Deployment
查看>>
阿里云《云原生》公开课笔记 第七章 应用编排与管理:Job和DaemonSet
查看>>