`
jiangduxi
  • 浏览: 456671 次
  • 性别: 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多表查询和子查询

    ### MySQL多表查询和子查询知识点详解 #### 1. 列出至少有4个员工的部门名称 ...以上示例涵盖了从简单的多表连接到复杂的子查询和聚合函数的应用,有助于深入理解 MySQL 多表查询和子查询的相关技术细节。

    mysql api查询手册

    通过这份MySQL API查询手册,开发者能够深入理解MySQL API的各个细节,从而更高效、安全地进行数据库操作。无论是在Web开发还是其他领域,这都是一个宝贵的资源。尽管本手册强调的是CHM版本,但其内容和知识点同样...

    SQL之分组统计和子查询专题

    本课程涵盖了分组统计的重点和难点、子查询的概念和应用场景,以及在实际开发中需要注意的细节。 分组统计 在SQL中,分组统计是对数据进行分组和统计的操作。常用的聚合函数有COUNT、SUM、AVG、MAX、MIN等。其中,...

    mysql项目的一些模块

    在MySQL项目中,模块是构建复杂系统的基本构造单元,它们负责特定的功能或子系统,使得整个数据库管理系统能够高效、稳定地运行。以下是对"mysql项目的一些模块"的详细解释: 1. **存储引擎**:MySQL支持多种存储...

    MYSQL执行计划及索引最佳实践

    - **PRIMARY**:查询中包含任何复杂的子查询时,最外层查询被标记为此类型。 - **SUBQUERY**:在SELECT或WHERE列表中包含了子查询。 - **DERIVED**:在FROM列表中包含的子查询。 - **UNION**:第二个SELECT出现...

    php+mysql学生成绩查询系统(源代码+论文).zip

    3. 其他文件:摘要总结.doc可能是系统设计与实现的概述,软件亲测可用,请放心.docx可能是测试报告,cg.htm、cg1.htm、cg2.htm、cg3.htm可能是系统的一些页面或子模块。 总结,PHP+MySQL学生成绩查询系统是一个实用...

    MySQL查询语句汇总.zip

    8. **子查询**:在SQL中,一个查询可以嵌套在另一个查询内部,作为其一部分。子查询可以在WHERE或FROM子句中使用,提供更复杂的筛选或计算。 9. **联接查询优化**:在处理大数据量时,优化JOIN操作至关重要,包括...

    MySql性能优化集合--满满的干货

    在进行MySQL性能优化之前,首先需要了解一些重要的性能指标,这些可以通过`SHOW STATUS`命令来查看: - **Slow_queries**:记录慢查询的数量。慢查询是指执行时间超过一定阈值的SQL语句,默认阈值为10秒。 - **Com_...

    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源码(mysql-8.2.0.zip)

    `mysql-8.2.0.zip`是MySQL的一个特定版本,以下是关于这个版本的一些关键知识点: 1. **版本更新**:MySQL 8.2.0是一个重要的里程碑,它可能包含了自上一个稳定版本以来的大量改进和新特性。通常,新版本会带来性能...

    几部Mysql学习书籍

    内容可能包括基础的SELECT语句、JOIN操作、子查询、事务处理、存储过程和函数等。作者可能还分享了一些关于如何编写高效SQL查询的技巧和最佳实践。 3. **《MySQL技术内幕InnoDB存储引擎》** InnoDB是MySQL中最常用...

    MYSQL5.1中文帮助

    3. **SQL语言基础**:包括SELECT查询、INSERT插入、UPDATE更新、DELETE删除等基本操作,以及JOIN、GROUP BY、HAVING、子查询等高级用法。此外,还有事务处理(BEGIN、COMMIT、ROLLBACK)和存储过程、触发器的概念。 ...

    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软件的安装

    MySQL是当今最流行的关系型数据库管理系统之一,其安装过程相对简单,但需要注意的一些细节。本文将对MySQL软件的安装进行详细的介绍,并对数据库的基本概念进行解释。 什么是数据库? 数据库是“按照数据结构来...

    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 执行计划解读

    在子查询的情况下,Id数字会递增,以区分不同的查询级别,数字较大的Id表示优先级更高,通常意味着查询会更早执行。 其次,select_type属性指出了每个select子句的类型,包括: - SIMPLE: 这表示查询不包含子查询或...

    mysql-5.5.62-win32源码下载SDK

    2. **SQL语法**:MySQL遵循SQL标准,支持常见的查询操作,如SELECT、INSERT、UPDATE、DELETE等,以及更复杂的JOIN、子查询和视图。 3. **索引**:MySQL使用B-Tree、Hash、Full-text等类型的索引来提高数据检索速度...

    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. 复制...

Global site tag (gtag.js) - Google Analytics