专栏首页AustinDatabasesMYSQL 中的查询技巧 与 MYSQL 8 并行查询

MYSQL 中的查询技巧 与 MYSQL 8 并行查询

最近公司的系统一点点的开始了拆分,从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 这样数据库的时间其实不多了。

本文分享自微信公众号 - AustinDatabases(AustinDatabases),作者:carol11

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 从 Anemometer BUG 到 FRM 文件的恢复

    最近深深体会到,目前的发展速度,数据库方面各种东西,原理层出不穷,一个礼拜不去看那些公众号去“滋养”,一下脑子,就发现新的概念不知道了。

    AustinDatabases
  • PostgreSQL 的JSON 处理甩“你”几条街

    首先这里的你绝对不是MONGODB ,至于是谁,你是谁,那的先了解POSTGRESQL 处理 JSON 的方式后,才能确定那个你是谁。

    AustinDatabases
  • MYSQL 从正则查询 扯到 查询中的大小写敏感的解决方法

    MYSQL 中的查询给人的观念大多是简单的,不复杂的,将复杂的事情都交给程序来做,数据库就是一个容器的概念或一个固化的观念。

    AustinDatabases
  • HAWQ技术解析(十二) —— 查询优化

            即便对SELECT等数据库查询语句已经很熟悉了,但HAWQ里的查询有其自己的特点,还是需要研究一下。 一、HAWQ的查询处理流程        ...

    用户1148526
  • Influx Sql系列教程八:query数据查询基本篇

    前面几篇介绍了InfluxDB的添加,删除修改数据,接下来进入查询篇,掌握一定的SQL知识对于理解本篇博文有更好的帮助,下面在介绍查询的基础操作的同时,也会给出...

    一灰灰blog
  • Visual Studio 2017 15.8 版发行说明

    显著提升了在运行包含多个测试项目的大型解决方案期间的性能。 在我们的实验室中,超过 10,000 个 MSTest 的解决方案执行单个测试的速度提高了 82%!

    Edi Wang
  • 提高数据库查询速度的几个思路

    1、缓存,在持久层或持久层之上做缓存。 2、数据库表的大字段剥离,保证单条记录的数据量很小。 3、恰当地使用索引。 4、必要时建立多级索引。 5、分析O...

    cloudskyme
  • MySql查询性能优化

    在访问数据库时,应该只请求需要的行和列。请求多余的行和列会消耗MySql服务器的CPU和内存资源,并增加网络开销。 例如在处理分页时,应该使用LIMIT限制My...

    lyb-geek
  • 深度学习小白的福音:使用Deep Learning Studio不涉及任何编码,训练并配置深度学习模型

    Deep Learning Studio是自2017年1月以来第一个强健的深度学习平台,有云计算和桌面计算两个版本,该平台拥有可视化界面。该平台提供了数据提取,...

    AiTechYun
  • mysql数据库开启慢查询日志

    第一句使用来定义慢查询日志的路径(若是linux系统,会涉及权限问题) 第二句使用来定义用时超过过多少秒的查询是慢查询,单位:秒。

    流柯

扫码关注云+社区

领取腾讯云代金券