Chinaunix首页 | 论坛 | 博客
  • 博客访问: 34676
  • 博文数量: 8
  • 博客积分: 46
  • 博客等级: 民兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-06 14:26
个人简介

干过研发,弄过运维,现在专职DBA。 玩过MYSQL,看过MARIADB,目前在搞MongoDB.

文章分类

全部博文(8)

文章存档

2013年(8)

我的朋友

分类: Mysql/postgreSQL

2013-11-12 11:25:19

各位看官,首先转发一贴(google了这么久,觉得写的最深入的一篇)http://blog.csdn.net/wudongxu/article/details/6966052
区别:对于直接join方式与in子查询方式,两者select的时间复杂度是一样的(注:这里的select是指获得数据的方式,个数)。唯一不同的是对于in子查询它每次执行内部查询的时候都必须重新构造一个JOIN结构(这就是大家常说的会将子查询转化成where exists(select 1 from a,b where a.id = b.id )),完成相应的初始化操作,并且在这次内部查询结束之后,要完成相应的析构函数,如index_init,index_end,而当外部查询是全表扫描的时候,这些操作的次数就是它的记录数,那么它们(构造,析构)所占用的性能也是显而易见的。简单一句话子查询的性能除了查询外,还消耗在JOIN的构造与析构过程。

相同点:两者select的时间复杂度是一样的(注:这里的select是指获得数据的方式,个数),并不是很多人所认为的子查询转换成where exists后select的时间复杂度会突然变成(M*N).
阅读(6957) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~