首页 > SQL中JOIN与子查询的优劣

SQL中JOIN与子查询的优劣

我是个MySQL新手,在涉及多表查询时,喜欢使用子查询,简单易懂。

SELECT * FROM *** WHERE id IN (SELECT ***);

但也发现很多人用JOIN同样能实现查询结果,我想知道JOIN相比子查询,在性能方面有什么优势吗?
我该如何理解JOIN语句呢?


我没有仔细了解过其中的差异,不过对于数据比较少(压力不大)的情况,两种都是可用的,估计性能差不了多少;对于数据量大的情况下,JOIN和子查询都是不可接受的,需要额外的优化(比如用nosql做缓存什么的)。


子查询就别用了,效率太差,如果是JOIN的话,它是走嵌套查询的。小表驱动大表,且通过索引字段进行关联。如果表记录比较少的话,还是OK的。大的话业务逻辑中可以控制处理。


http://chaous.com/MySQL/2012/03/27/my...

关于MySQL IN运算之前写过一篇文章,希望对LZ有用。

至于怎么理解JOIN查询,推荐LZ一本书 http://book.douban.com/subject/105696...


对于mysql,从来都不推荐使用子查询和join。因为本身join的效率就是硬伤,一旦数据量上去效率很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据。


具体性能我不清楚。不过我看别人说,是用join代替子查询。


通常用join
如果是做分析就用join


as described on stackoverflow.http://stackoverflow.com/questions/38...

7 down vote accepted

I would EXPECT the first query to be quicker, mainly because you have an equivalence and an explicit JOIN. In my experience IN is a very slow operator, since SQL normally evaluates it as a series of WHERE clauses separated by "OR" (WHERE x=Y OR x=Z OR...).

As with ALL THINGS SQL though, your mileage may vary. The speed will depend a lot on indexes (do you have indexes on both ID columns? That will help a lot...) among other things.

The only REAL way to tell with 100% certainty which is faster is to turn on performance tracking (IO Statistics is especially useful) and run them both. Make sure to clear your cache between runs!


小数据量无所谓,大数据量下还是极力避免吧。


我觉得小数据量无所谓,大数据量又不会用这种办法了。

【热门文章】
【热门文章】