MySQL支持的join操做:JOIN、STRAIGHT_JOIN、LEFT JOIN、RIGHT JOIN。不支持FULL OUTER JOIN。html
在MySQL中,JOIN, CROSS JOIN, 和INNER JOIN相互等价。可是在正常的SQL标准中,他们是不等价的。INNER JOIN一般和ON字句一块儿使用,CROSS JOIN以其余方式使用。mysql
MySQL使用大名鼎鼎的Nested-Loop Join算法来执行Join操做的。算法
MySQL以以下方式执行 A LEFT JOIN B join_condition:sql
注意:使用left join的时候先使用on子句的条件检索行,最后再根据where子句条件过滤结果集。而不会在检索表B的时候使用where条件过滤。可是在使用join的时候,过滤条件放在on子句和放在where子句是同样的。oop
STRAIGHT_JOIN is similar to JOIN, except that the left table is always read before the right table. This can be used for those (few) cases for which the join optimizer puts the tables in the wrong order.优化
这句话的意思就是:除了STRAIGHT_JOIN
能够指定左表在右表以前被读取以外,STRAIGHT_JOIN
和JOIN
是相似的。当MySQL的join优化器
载入表的顺序不是最优的时候,可使用STRAIGHT_JOIN
来指定。code
B-Tree
的,因此组合索引有”字段顺序“概念。当查询条件中有cat2 in (1,2),而组合索引是(cat1,cat2),则该查询没法使用到这个组合索引。Nest Loop Join
第一行出现的表就是驱动表
(Important!)驱动表能够直接排序
,对非驱动表(的字段排序)须要对循环查询的合并结果(临时表)进行排序!(Important!)驱动表
的定义为:
参考:htm