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