mysql联合查询和join区别?
MySQL联合查询和JOIN区别是:连接方式不同。
联合查询是将两个查询的结果以"纵向堆叠"的方式合并起来,即一个查询结果的行跟另一个查询结果的行进行"纵向堆叠",从而得到一个新的结果。
JOIN是将两个查询(或表)的每一行,以"两两横向对接"的方式合并起来,即一个表中的某行跟另一个表中的某行进行"横向对接",从而得到一个新行。
mysql一张大表,一张小表,如何join最快?
rows代表这个步骤相对上一步结果的每一行需要扫描的行数,可以看到这个sql需要扫描的行数为35773*8134,非常大的一个数字。本来c和h表的记录条数分别为40000+和10000+,这几乎是两个表做笛卡尔积的开销了(select * from c,h)。
于是我上网查了下MySQL实现join的原理,原来MySQL内部采用了一种叫做 nested loop join的算法。Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。如果还有第三个参与 Join,则再通过前两个表的 Join 结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询数据,如此往复,基本上MySQL采用的是最容易理解的算法来实现join。所以驱动表的选择非常重要,驱动表的数据小可以显著降低扫描的行数。
还没有评论,来说两句吧...