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数据库计有所帮助。

相关文章

  • 详解MySQL如何避免全表扫描

    详解MySQL如何避免全表扫描

    这篇文章主要为大家详细介绍了为什么MySQL会执行全表扫描来解析查询,以及如何避免在大型表上进行不必要的全表扫描,有需要的小伙伴可以了解下
    2024-04-04
  • mysql索引失效的问题

    mysql索引失效的问题

    这篇文章主要介绍了mysql索引失效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教<BR>
    2023-08-08
  • Linux下安装MySQL8.0.11的教程

    Linux下安装MySQL8.0.11的教程

    这篇文章主要介绍了Linux下安装MySQL8.0.11的教程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • mysql拆分字符串作为查询条件的示例代码

    mysql拆分字符串作为查询条件的示例代码

    本文主要介绍了mysql拆分字符串作为查询条件的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Mysql数据库分库和分表方式(常用)

    Mysql数据库分库和分表方式(常用)

    本文主要给大家介绍Mysql数据库分库和分表方式(常用),涉及到mysql数据库相关知识,对mysql数据库分库分表相关知识感兴趣的朋友一起学习吧
    2016-03-03
  • mysql触发器之创建多个触发器操作实例分析

    mysql触发器之创建多个触发器操作实例分析

    这篇文章主要介绍了mysql触发器之创建多个触发器操作,结合实例形式分析了mysql创建及使用多个触发器的相关操作技巧,需要的朋友可以参考下
    2019-12-12
  • Mysql主从同步的实现原理

    Mysql主从同步的实现原理

    这篇文章主要介绍了Mysql主从同步的实现原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • MySQL日志的详细分析实例

    MySQL日志的详细分析实例

    MySQL日志记录了MySQL数据库日常操作和错误信息,下面这篇文章主要给大家介绍了关于MySQL日志的详细分析,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • MyEclipse连接Mysql数据库的方法(一)

    MyEclipse连接Mysql数据库的方法(一)

    这篇文章主要介绍了MyEclipse连接Mysql数据库的方法(一)的相关资料,非常实用,具有参考价值,需要的朋友可以参考下
    2016-05-05
  • MySQL多实例的配置应用实例场景

    MySQL多实例的配置应用实例场景

    在一台服务器上,运行多个数据库服务,这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务,这篇文章主要介绍了MySQL多实例的配置场景分析,需要的朋友可以参考下
    2021-12-12

最新评论