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
-
This type replaces
ref
for someIN
subqueries of the following form:value
IN (SELECTprimary_key
FROMsingle_table
WHEREsome_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
<derived
: The row refers to the derived table result for the row with an N
>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
相关推荐
第4课 查询优化技术理论与MySQL实践(二)------子查询的优化(二) 从理论看,子查询包括的内容和范围,建立清晰的概念 从实践看,MySQL的子查询优化技术的内容和范围,明确掌握子查询优化手段 预计时间2小时,每...
MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询...
主要介绍了Mysql数据库性能优化之子查询的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
本文实例讲述了mysql关联子查询的一种优化方法。分享给大家供大家参考,具体如下: 很多时候,在mysql上实现的子查询的性能较差,这听起来实在有点难过。特别有时候,用到IN()子查询语句时,对于上了某种数量级的表...
Mysql查询优化,查询优化器,子查询,分页查询1)在执行计划1中,哪张表是驱动表? 表的连接顺序是怎样的?每一步表的扫描类型是什么? 2)在执行计划2中,表的执行顺序是怎样的?每一步表的扫描类型是什么? 3)在...
今天看到一篇关于MySQL的IN子查询优化的案例, 一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试。) 随后动手按照他说的做了一个表来测试验证,发现MySQL的IN子...
使用过oracle或者其他关系数据库的DBA或者开发人员都有这样的经验,在子查询上都认为数据库已经做过优化,能够很好的选择驱动表执行,然后在把该经验移植到mysql数据库上,但是不幸的是,mysql在子查询的处理上有...
第二:使用连接查询(join)代替子查询。 子查询的优点是可以使用简单的SELECT语句就可以完成逻辑较为复杂的查询动作,而且还能避免死锁的情况产生。但是有时也可以考虑使用连接查询来完成,毕竟连接查询不需要像子...
本文通过实例向大家介绍了MYSQL子查询和嵌套查询优化的相关内容,附代码示例,具有一定参考价值。希望对大家使用MySQL有所帮助。
主要介绍了MySQL的子查询及相关优化学习教程,使用子查询时需要注意其对数据库性能的影响,需要的朋友可以参考下
1.5子查询 1.6联接与集合操作 1.7聚合和旋转操作 2. SQL优化 2.1优化SQL的一般步骤 2.2 索引问题. 2.3两个常用的优化技巧 2.4常用SQL优化 2.5常用SQL技巧 3.优化数据库对象 3.1优化表的数据类型逆规范化 ...
【大厂面试题】史上最详细的一线大厂Mysql面试题详解MySQL执行计划及...执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速 度会受到一定的影响,这里多了一个创建和销毁临时表的过程。
01-MySQL优化大的思路.wmv 02-Awk简洁入门.wmv 03-观察服务器周期性变化.wmv 04-观察MySQL进程状态.wmv 05-列选取原则.wmv 06-多列索引生效规则.wmv 07-多列索引实验.wmv 08-商城多列索引实验.wmv 09-聚簇索引概念....
MySQL 表子查询 表子查询是指子查询返回的结果集是 N 行 N 列的一个表数据。 MySQL 表子查询实例 下面是用于例子的两张原始数据表: article 表: blog 表: SQL 如下: SELECT * FROM article WHERE (title,...
MySql数据库中的子查询: 子查询:在一条select查询语句中嵌套另一条select语句,其主要作用是充当查询条件或确定数据源。 代码案例如下: 例1. 查询大于平均年龄的学生: select * from students where age > ...
MySQL数据库优化心得:选取最适用的字段属性;使用连接(JOIN)来代替子查询(Sub-Queries);使用联合(UNION)来代替手动创建的临时表;事务;锁定表;外键等。
mysql的子查询的优化一直不是很友好,一直有受业界批评比较多,也是我在sql优化中遇到过最多的问题之一,你可以点击这里 ,这里来获得一些信息,mysql在处理子查询的时候,会将子查询改写,通常情况下,我们希望由内到...