`
jiangduxi
  • 浏览: 444492 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mysql的子查询的一些细节

 
阅读更多
以下关于mysql的子查询的分析来源于http://hidba.org/?p=260 
使用了mysql好几年了,今天才发现自己对mysql的子查询的理解是错误的。下面我们看看mysql子查询中的两点
1.mysql在处理所有的查询的时候都强行转换为联接来执行,将每个查询包括多表中关联匹配,关联子查询,union,甚至单表的的查询都处理为联接,接着mysql执行联接,把每个联接在处理为一个嵌套循环(oracle-nest-loop);
2.在mysql在处理子查询的时候,会将将子查询改写,通常情况下,我们希望由内到外,先完成子查询的结果,然后在用子查询来驱动外查询的表,完成查询.例如:
Select * from test where test_id in(select fk_test_id from sub_test where group_id=10)
这条sql的执行过程:
  我之前认为是先执行子查询Select fk_test_id from sub_test where group_id=10
然后将子查询的结果作为前一个查询的in的条件。
  但实际居然是:mysql将会扫描test中的所有数据,每条数据将会传到子查询中与sub_test关联,子查询不能首先被执行。如果是这样的话,当test 表大的话,就会产生严重的性能问题。

因此上面的sql语句改为:select t1.* from test t1,(select fk_test_id from sub_test where group_id=10 ) t2 where t1.test_id=t2.fk_test_id ;
确实很达到优化的效果。
   阿里的DB团队还真不错。学习了!
分享到:
评论

相关推荐

    MySQL 5.1中文手冊

    5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制...

    MySQL 5.1官方简体中文参考手册

    5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制...

    MySQL 5.1参考手册

    5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制...

    mysql5.1中文手册

    MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施...

    MySQL 5.1参考手册中文版

    5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3....

    MySQL 5.1参考手册 (中文版)

    5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制...

    MYSQL中文手册

    5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3...

    mysql官方中文参考手册

    5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制...

    MySQL5.1参考手册官方简体中文版

    5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制...

    php+mysql大量用户登录解决方案分析

    本文实例分析了php+mysql大量用户登录解决方案。分享给大家供大家参考。具体分析如下: ...但是MySQL是单点的,无论做多少从库,都是优化查询,更新数据就无法只是简单的通过加机器解决了,而且查询也可

    飞蛙B2B2C商城电商系统 v2.1.8.zip

    系统内建丰富的查询机制,包括组合查询、复合查询、区间查询、统计查询、定位查询、多表查询、子查询和原生查询,使用数据查询简洁高效。 5、动态模型 系统中无需创建对应的模型类、即可轻松完成CURD操作,使...

    JAVA自学之路

    经常的进行知识难点的查询,如果一个问题牵扯的面比较广,就干脆到网上搜索一些相关的专题,比如“java 乱码 mysql” “oracle 创建用户”等等,如果有必要,不要犯懒,勤动手写一些小小的测试程序,来弄明白知识点...

    PHP程序设计简明教程.rar

    这些参考手册和图书,其内容越来越丰富,在描述上不可谓不详尽,但是这些“详尽”的细节描写,对初学者而言,都显得“大而全”,看起来犹如走进了迷宫,总感觉不甚明了。笔者在教学实践中,曾拿它们直接作为教材使用...

    30daysofnode:30天的节点是针对node.js的代码基础教程系列,旨在提供基于项目的实践学习经验,而不是谈论其概念性细节

    node的30天是一个针对node.js的代码基础教程系列,旨在提供基于项目的实践学习经验以及谈论其概念性细节。 第16天-Zlib模块 第17天-使用node.js在MySQL中进行CRUD 第18天-node.js中的回调概念 第19天-node.js中的...

    最近很火的分布式数据库 RethinkDB.zip

    高效实现实时推送架构需要重新设计绝大部分的数据库成分,包括查询执行引擎、分布式系统、超高速缓存子系统和存储引擎。因为架构影响到每一个数据库 组成部分,RethinkDB不得不从C 开始一步步写起来。RethinkDB 是...

    2009达内SQL学习笔记

    当从多张表里查询的时候,会产生笛卡尔积;可用条件过滤它。 当两个表有相同字段时必须加前缀,列名前需加表名和“.”,如“s_emp.id”。 1、用法:SELECT columns,prod2,prod3<列> FROM Table1,table2<表名> ...

    java8源码-article:sgk

    之前本来和404约好8月初弄好的结果一下子到26号才开始弄,现在差不多了,后面就是导入数据和扩容 移植ssd的问题了(数据量大再过滤) 0x吐槽 elk的查询速度其实是比solr要好的 tools里面也有大佬分享了这个教程 当时看了...

Global site tag (gtag.js) - Google Analytics