前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MYSQL 中的查询技巧 与 MYSQL 8 并行查询

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

作者头像
AustinDatabases
发布2019-06-24 15:51:29
8K0
发布2019-06-24 15:51:29
举报
文章被收录于专栏:AustinDatabases

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档