`

MySQL优化二之子查询

 
阅读更多

 

SQL样例: select * from table_a where id in ( select id from table_b where name = '' ) 

 

场景说明:

MySQL 5.6以下的子查询都会全表扫描table_a 然后每条记录去和子查询 table_b  来做join操作

 

理想的情况是 :

先查询出子查询里面的内容再和外面的查询进行in操作

 

案例测试:

5.5版本

 

子查询:

explain SELECT * FROM `mytest`.`table_rm001` as t1 where id in ( 

    select id from `mytest`.`table_rm001` as t2 where t2.`bigint` = 499999    

)



select_type

DEPENDENT SUBQUERY First SELECT in subquery, dependent on outer query

type

  •  unique_subquery

    This type replaces ref for some IN subqueries of the following form:

    value IN (SELECT primary_key FROM single_table WHERE some_expr)
    

    unique_subquery is just an index lookup function that replaces the subquery completely for better efficiency.

上面的子查询t2里面查询的是ID,ID又是主键,是聚簇索引,所以才走primary 。

其实一般我们想的是t1能够走主键索引,这样效率比较高。

下面我们换个字段来看看

 

子查询二:

 explain select * from `test_xiaogu`.`table_rm001` as t1, 

(select id from `test_xiaogu`.`table_rm001` as t2 where t2.`bigint` = 499999 ) as t3

  where t1.id = t3.id

   

 

 

修改成join

explain select * from `mytest`.`table_rm001` as t1, 

(select id from `mytest`.`table_rm001` as t2 where t2.`bigint` = 499999 ) as t3

    where t1.id = t3.id

id The SELECT identifier

table 

<derivedN>: The row refers to the derived table result for the row with an id value of N. A derived table may result, for example, from a subquery in the FROM clause

 

5.6 版本

select version()



 子查询:

explain SELECT * FROM `test_xiaogu`.`table_rm001` as t1 where id in ( 

    select id from `test_xiaogu`.`table_rm001` as t2 where t2.`bigint` = 499999    

)



 5.6 改成join

   explain select * from `test_xiaogu`.`table_rm001` as t1, 

(select id from `test_xiaogu`.`table_rm001` as t2 where t2.`bigint` = 499999 ) as t3

    where t1.id = t3.id

 

 

  • 大小: 58 KB
  • 大小: 143.7 KB
  • 大小: 175.8 KB
  • 大小: 73.8 KB
  • 大小: 151.4 KB
  • 大小: 168.1 KB
  • 大小: 155.7 KB
1
0
分享到:
评论

相关推荐

    MySQL数据库查询优化

    第4课 查询优化技术理论与MySQL实践(二)------子查询的优化(二) 从理论看,子查询包括的内容和范围,建立清晰的概念 从实践看,MySQL的子查询优化技术的内容和范围,明确掌握子查询优化手段 预计时间2小时,每...

    mysql子查询与连表查询的效率比较及优化

    ### MySQL 子查询与连表查询的效率比较及优化 #### 一、子查询与连表查询概述 在SQL查询语言中,子查询与连表查询是两种非常重要的查询技术,广泛应用于各种复杂的业务场景中。为了更好地理解这两种查询方式的特点...

    mysql子查询的用法

    在本篇文章中,我们将深入探讨MySQL子查询的用法,包括单行子查询、多行子查询、关联子查询以及它们在实际应用中的示例。 1. 单行子查询 单行子查询返回单个值,常用于WHERE子句中与外部查询的字段进行比较。例如,...

    mysql优化笔记+资料

    2. 减少子查询,尽可能用JOIN替换,因为子查询通常效率较低。 3. 避免在SELECT语句中使用*,明确指定需要的列,减少数据传输量。 三、数据库设计优化 1. 正确设计数据库模式,减少冗余数据,防止数据不一致。 2. ...

    MySQL锁类型以及子查询锁表问题、解锁1

    在实际应用中,可能会遇到死锁问题,特别是在涉及子查询的更新语句中。如描述中所示,如果一个事务在更新时对子查询中的表进行锁定,可能导致其他事务尝试获取已被锁定的资源,从而引发死锁。MySQL在检测到死锁时会...

    MySQL数据库:相关子查询.pptx

    MySQL数据库中的相关子查询是一种高级查询技术,它在处理复杂的数据检索时非常有用。相关子查询的特点在于,其内部查询的执行与外部查询是紧密关联的,子查询的执行依赖于外部查询的某个属性值。这与嵌套子查询形成...

    二、mysql优化技术-定位慢查询

    "二、mysql优化技术-定位慢查询"这一主题聚焦于如何识别和解决性能瓶颈,提升数据库的响应速度。这篇博文可能详细介绍了如何诊断和解决MySQL中的慢查询问题,而`sql.txt`文件很可能包含了一些示例SQL语句或者慢查询...

    25.6 MySQL 子查询

    优化子查询可以通过使用JOIN操作、临时表或者将子查询结果缓存到变量中来提高效率。如果子查询结果不会改变,可以考虑使用存储过程或视图来预先计算并存储结果。 5. **子查询与联接**: 在某些情况下,子查询可以...

    MySql优化.rar

    通过对SQL语句进行分析,避免全表扫描,合理使用JOIN操作,以及优化子查询,可以显著减少查询时间。例如,使用EXPLAIN命令预览查询执行计划,可以帮助我们理解数据库如何执行SQL语句,并找出潜在的性能瓶颈。 其次...

    Mysql数据库性能优化之子查询

    4. **优化统计信息**:确保定期运行ANALYZE TABLE更新表的统计信息,这有助于MySQL优化器做出更好的决策。 5. **使用物化视图**:如果某些子查询经常被用到,可以考虑创建物化视图,预先计算好结果,提高查询速度。...

    2.mysql查询性能优化1

    MySQL 提供了多种查询优化技术,包括使用 UNION 优化、使用子查询优化、使用 JOIN 优化等。 6.3 MySQL 查询优化工具 MySQL 提供了多种查询优化工具,包括 EXPLAIN、SHOW PROFILE 等。这些工具可以帮助数据库管理员...

    深入浅出的mysql优化大全

    以下是一些深入浅出的MySQL优化策略: 1. 选择合适的字段属性: 在设计数据库表时,应尽可能减小字段宽度,以减少存储空间和查询时间。例如,邮政编码字段只需设定为CHAR(6)即可,无需使用VARCHAR或更大的类型。...

    MySQL查询优化器的工作原理

    - opt_sum_query():优化子查询。 - make_join_statistics():收集联接操作的统计数据。 - choose_plan():选择最优的执行计划。 在优化过程中,优化器会考虑多种操作符和条件,如常数传播(Constant Propagation)...

    mysql性能的优化

    #### 一、什么是MySQL优化? MySQL优化是指通过合理安排资源和调整系统参数,使得MySQL运行得更快、更节省资源的过程。优化的目的在于减少系统瓶颈,降低资源消耗,提升系统的响应速度。 #### 二、优化的主要方面 ...

    MySQL GUI Tools MYSQL优化工具

    - **查询优化**: 优化SQL语句,避免全表扫描和子查询,使用JOIN代替子查询,合理使用LIMIT和ORDER BY。 - **存储引擎选择**: 根据数据访问模式选择合适的存储引擎,如InnoDB支持事务处理,MyISAM适合读取密集型...

    MySQL海量数据查询优化策略.

    12. 优化子查询:在可能的情况下,尽量将子查询转换为JOIN操作,因为JOIN往往比子查询在性能上更优。 13. 插入数据时使用SELECT INTO:可以用来创建新表,并将数据一次性插入新表中,这是一个高效的数据复制和迁移...

    Mysql优化方法介绍.ppt

    MySQL 优化方法主要涵盖...总之,MySQL优化涉及多个层面,包括合理选择存储引擎、优化字段类型、建立合适索引以及编写高效的SQL语句。每个环节都对数据库性能有着直接影响,需要根据实际业务需求进行综合考虑和调整。

Global site tag (gtag.js) - Google Analytics