mysql关联子查询的一种优化方法分析

 更新时间:2016年04月19日 11:29:11   作者:mo_guang  
这篇文章主要介绍了mysql关联子查询的一种优化方法,结合实例形式分析了针对MySQL的关联子查询进行优化的技巧,需要的朋友可以参考下

本文实例讲述了mysql关联子查询的一种优化方法。分享给大家供大家参考,具体如下:

很多时候,在mysql上实现的子查询的性能较差,这听起来实在有点难过。特别有时候,用到IN()子查询语句时,对于上了某种数量级的表来说,耗时多的难以估计。本人mysql知识所涉不深,只能慢慢摸透个中玄机了。

假设有这样的一个exists查询语句:

select * from table1
where exists
  (select * from table2 where id>=30000 and table1.uuid=table2.uuid);

table1为十万行级的表,table2为百万行级的表,本机测试结果用时2.40s。

通过explain可以看到子查询是一个相关子查询(DEPENDENCE SUBQUERY); Mysql会首先对外表table1进行全表扫描,然后根据返回的uuid逐次执行子查询。如果外层表是一个很大的表,我们可以想象查询性能会表现得比此次测试更糟糕。

一种简单的优化方案为使用inner join的方法来代替子查询, 查询语句则可以改为:

复制代码 代码如下:
select * from table1 innner join table2 using(uuid) where table2.id>=30000;

本机测试结果用时0.68s。

通过explain可以看到mysql使用了SIMPLE类型(子查询或union以外的查询方式); Mysql优化器会先过滤table2,然后对table1和table2做笛卡尔积得出结果集后,再通过on条件来过滤数据。

当然了,并不是所有情况下关联子查询的性能都会差;具体效果需要进行实际的测试才能得出结果。

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总

希望本文所述对大家MySQL数据库计有所帮助。

相关文章

  • 允许任意IP访问mysql数据库的方法详解

    允许任意IP访问mysql数据库的方法详解

    MYSQL默认只能本地连接,即127.0.0.1和localhost,其他主机IP无法访问数据库,那么如何允许任意IP访问mysql数据库,所以本文小编将给大家介绍允许任意IP访问mysql数据库的方法,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • mysql SQL语句积累

    mysql SQL语句积累

    mysql SQL语句积累,学习mysql的朋友可以参考下。
    2011-09-09
  • MySql escape的使用案例详解

    MySql escape的使用案例详解

    本文通过实际案例给大家介绍MYSQL escape的使用,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-09-09
  • 修改MySQL密码的四种方法总结(适合初学者!)

    修改MySQL密码的四种方法总结(适合初学者!)

    在日常使用数据库的过程中,难免会遇到需要修改账号密码的情景,比如密码太简单需要修改、密码过期需要修改、忘记密码需要修改等,下面这篇文章主要给大家介绍了关于修改MySQL密码的四种方法,介绍的方法非常适合初学者,需要的朋友可以参考下
    2022-08-08
  • 一文学习MySQL 意向共享锁、意向排他锁、死锁

    一文学习MySQL 意向共享锁、意向排他锁、死锁

    这篇文章主要介绍了MySQL 意向共享锁、意向排他锁、死锁,包括InnoDB表级锁,意向共享锁和意向排他锁及操作方法,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • MySQL本地版本升级超详细教程(从5.5.20升到8.0.21)

    MySQL本地版本升级超详细教程(从5.5.20升到8.0.21)

    MySQL是一款广泛使用的关系型数据库管理系统,但是旧版本的客户端可能会受到一些限制,下面这篇文章主要给大家介绍了关于MySQL本地版本升级超详细教程,本文是从5.5.20升到8.0.21的相关资料,需要的朋友可以参考下
    2023-04-04
  • MAC下MySQL忘记初始密码怎么办

    MAC下MySQL忘记初始密码怎么办

    MySQL初始密码忘记怎么办,这篇文章主要介绍了MAC下MySQL忘记初始密码的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • 教你为MySQL数据库换挡加速

    教你为MySQL数据库换挡加速

    如果你是个赛车手,并且按一下按钮就能够立即更换引擎而不需要把车开到车库里去换,那会是什么感觉呢?MySQL数据库为开发人员所做的就好像是按按钮换引擎;它让你选择数据库引擎,并给你一条简单的途径来切换它。
    2010-02-02
  • MySQL内部临时表的具体使用

    MySQL内部临时表的具体使用

    MySQL临时表在很多场景中都会用到,比如用户自己创建的临时表用于保存临时数据,以及MySQL内部在执行复杂SQL时,需要借助临时表进行分组、排序、去重等操作,本文就来详细的介绍一下MySQL内部临时表
    2021-10-10
  • mysql触发器同步表的数据方式

    mysql触发器同步表的数据方式

    这篇文章主要介绍了mysql触发器同步表的数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论