美文网首页
MySQL中in(独立子查询)的执行计划

MySQL中in(独立子查询)的执行计划

作者: 田真的架构人生 | 来源:发表于2017-08-03 21:39 被阅读0次

在之前有一篇文章讲了in(常量列表)的执行计划,详见链接:
http://blog.itpub.net/28912557/viewspace-1255568/
那么对于对于in(独立子查询),MYSQL会怎么执行呢?其实,现代mysql优化器都会将in独立子查询语句转换为exists相关子查询。
所以有些人发现在MYSQl中测试发现in与exists性能差不多,就是这个原因。因此我们就不必纠结是选择in还是exists了,大部分情况下,其实都一样。
但是这里有一个问题,假如外部查询、子查询分别有M、N条记录,那么整个查询会进行O(M+MN)次扫描,意味着逻辑IO大大增加。(M为外部表查询扫描次数,MN为exists相关子查询扫描次数)。
为了减少逻辑IO,可以对相关子查询进行优化,譬如:
1,对子查询建立索引,这是显而易见的。
2,假如子查询中有group by操作,每一次关联外部查询都会进行group by,可以考虑在子查询外面再嵌套一层子查询,做成静态的,减少逻辑IO。
3,使用派生表重写子查询,进行表连接。
总之,按需求来优化。

相关文章

  • MySQL中in(独立子查询)的执行计划

    在之前有一篇文章讲了in(常量列表)的执行计划,详见链接:http://blog.itpub.net/289125...

  • MySQL 8.0 版本 SQL查询优化

    1、尽量避免使用子查询 例: 子查询在MySQL5.5版本里,内部执行计划器是这样执行的:先查外表再匹配内表,而不...

  • MySQL慢查询

    定义 分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定...

  • mysql慢查询优化——持续优化

    问题SQL: 执行计划: 执行计划中,可以看到并没有走索引。问题是子查询中in( select max(id))此...

  • SQL执行与优化

    SQL优化 执行计划,表关联查询顺序,优化策略与思路 MYSQL执行过程 一、MySQL架构总览: 二、查询执行流...

  • Mysql - Explain

    Mysql - Explain explain + 查询sql可以生成一个执行计划,可以通过执行计划来进行sql优...

  • MySQL进阶之路--EXPLAIN执行计划详解

    执行计划简介 执行计划是指一条SQL语句在经过MySQL查询优化器的优化会后,具体的执行方式。MySQL为我们提供...

  • SELECT型相关子查询和独立子查询

    以上SQL, SELECT型子查询, 不管是相关子查询还是独立子查询, 在MySQL的8.0.25版本中都可以运行...

  • exists改写join

    解读执行计划 在exists类型的子查询的执行计划中,select_type一栏分别是PRIMARY和DEPEND...

  • MySQL干货之-利用EXPLAIN优化查询

    ​ 在工作中,经常会碰到一些慢查询,Explain可以帮我们更详细的了解MySQL查询的执行计划,用法也很简单...

网友评论

      本文标题:MySQL中in(独立子查询)的执行计划

      本文链接:https://www.haomeiwen.com/subject/ezrmlxtx.html