【mysql】关联子查询的一种优化

转载 2016年06月01日 10:32:24

原文地址:http://blog.csdn.net/moxiaomomo/article/details/9566889

很多时候,在mysql上实现的子查询的性能较差,这听起来实在有点难过。特别有时候,用到IN()子查询语句时,对于上了某种数量级的表来说,耗时多的难以估计。本人mysql知识所涉不深,只能慢慢摸透个中玄机了。

假设有这样的一个exists查询语句:

select * from table1
where exists
    (select * from table2 where id>=30000 and table1.uuid=table2.uuid);

table1为十万行级的表,table2为百万行级的表,本机测试结果用时2.40s。

通过explain可以看到子查询是一个相关子查询(DEPENDENCE SUBQUERY); Mysql会首先对外表table1进行全表扫描,然后根据返回的uuid逐次执行子查询。如果外层表是一个很大的表,我们可以想象查询性能会表现得比此次测试更糟糕。


一种简单的优化方案为使用inner join的方法来代替子查询, 查询语句则可以改为:

select * from table1 innner join table2 using(uuid) where table2.id>=30000;

本机测试结果用时0.68s。

通过explain可以看到mysql使用了SIMPLE类型(子查询或union以外的查询方式); Mysql优化器会先过滤table2,然后对table1和table2做笛卡尔积得出结果集后,再通过on条件来过滤数据。



当然了,并不是所有情况下关联子查询的性能都会差;具体效果需要进行实际的测试才能得出结果。

相关文章推荐

武新:新型MPP数据库将支撑起大数据时代

近期由中关村大数据产业联盟举办的“大数据100分”线上研讨会中,南大通用的CTO、资深业界专家武新博士同众多网友分享了底层数据处理技术的发展趋势和正在经历的巨大变革。以下为分享实录:   大数据这个...

MySQL 体系架构 Oracle体系架构 PostgreSQL体系架构

了解MySql必须牢牢记住其体系结构图,Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的。 1、Connectors指的是不同语言中与SQL的交互 2、Management Se...

【mysql】关联子查询的一种优化

很多时候,在mysql上实现的子查询的性能较差,这听起来实在有点难过。特别有时候,用到IN()子查询语句时,对于上了某种数量级的表来说,耗时多的难以估计。本人mysql知识所涉不深,只能慢慢摸透个中玄...

MySQL SQL优化:关联子查询的局限性

这是MySQL SQL优化的第三篇。公司某个业务系统频繁抛出问题SQL,我们对此类SQL做了基本面统计:此类SQL近期共执行了12次,最长一次花费480秒,最短286秒t1表的rows有90多万,始终...

2)mysql 单表的增删改查,以及子查询,关联查询

七表的增删改查 1 INSERT INTO 插入 2 更新记录 3 删除记录 4 SELECT 查找 八子查询和连接 1 准备数据 2 子查询的使用 3 insert select 的使用 4 多表更...
  • hp5321
  • hp5321
  • 2016年12月21日 16:32
  • 224

MySQL多表关联查询+子查询_R

MySQL多表关联查询+子查询 -- **************关联查询(多表查询)****************-- 多表查询规则:1)确定查询哪些表。 2)确定哪些字段。 3)表与表之间...

mysql查询语句 和 多表关联查询 以及 子查询

mysql(三):mysql查询语句 和 多表关联查询 以及 子查询 1.查询一张表:     select * from 表名; 2.查询指定字段...

mysql in 子查询 效率慢 优化(转)

现在的CMS系统、博客系统、BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下。但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久!百思不解(后来终于解决),我的表结构是下面这样...

mysql limit的效率及优化和不支持limit子查询的猜测[数据库]

原文地址:http://kkito.cn/index.php/blog/getArticle/163/mysql_limit%E7%9A%84%E6%95%88%E7%8E%87%E5%8F%8A%E...
  • kvgnt
  • kvgnt
  • 2011年10月16日 22:35
  • 603

mysql in 子查询 效率慢 优化

现在的CMS系统、博客系统、BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下。但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久!百思不解(后来终于解决),我的表结构是下面这样...
  • xtjsxtj
  • xtjsxtj
  • 2015年06月01日 16:30
  • 1169
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【mysql】关联子查询的一种优化
举报原因:
原因补充:

(最多只允许输入30个字)