MYSQL子查询优化使用.docxVIP

  • 19
  • 0
  • 约1.7千字
  • 约 6页
  • 2023-08-01 发布于北京
  • 举报
子查询优化——子查询转换为连接 子查询优化是MySQL DBA必备的一个技能,原因如下: MySQL对子查询的处理并不是很好,不能像Oracle一样可以改写子查询。 基于代价的查询优化器并不完善(在MySQL 5.7版本之后逐渐加强)。本章我们讲解几个子查询优化案例,让大家加深对子查询的印象。 案例中所使用的表及数据可以从/datacharmer/test_db下载。 问题现象 每日夜间对客户系统做备份时总是不成功,并导致整个系统不能正常运行,排查后发现是由于该备份操作与一条查询SQL语句发生了冲突。关于备份为何会与查询SQL语句冲突这里不做过多解释,我们主要分析整条SQL语句为何执行过慢。SQL语句结构如下: 这是一个很简单的子查询,但是在早期的MySQL版本(客户使用的是5.5版本)中对子查询的处理并不是先执行子查询,然后再与外表进行关联的,而是遍历employees(a) 表中的每一条记录,代入到子查询中。这条查询语句的执行计划如图38-1所示。 图38-1 从执行计划(关于执行计划详解,请参考本书下载资源中的“附录D”)上看,先执行的是b表,但是b表的select_type是“DEPENDENT SUBQUERY”,表示这个子查询依赖于外表查询,而不是先执行子查询。在MySQL早期版本中,对于in的操作子查询是不能展开的,但是在新版本中做了一些优化,可以将子查询展开。例如,

文档评论(0)

1亿VIP精品文档

相关文档