一 3種連接
1 內連接
語法:
SELECT * FROM t1 JOIN t2 ON t1.m1 = t2.m2;
等價語法:
SELECT * FROM t1, t2 where t1.m1 = t2.m2;
內連接會把關聯的兩個表的結果集是他們的交集,兩個表都可以作爲驅動表。
2 左連接
語法:
SELECT * FROM t1 LEFT JOIN t2 ON t1.m1 = t2.m2;
left左側表中的記錄都會被展示出來,如果左側表沒有和右側表匹配到記錄,那麼右側表的顯示字段
用null代替;左連接用左側表作爲驅動表。
3 右連接
語法:
SELECT * FROM t1 RIGHT JOIN t2 ON t1.m1 = t2.m2;
right右側表中的記錄都會被展示出來,如果右側表沒有和左側表匹配到記錄,那麼左側表的顯示字段
用null代替;右連接用右側表作爲驅動表。
二 連接原理
1 嵌套循環連接
過程爲:
1)先用驅動表加上過濾條件,使用最小代價的查詢方法查詢得到驅動表的結果集;
2)根據驅動表結果集中的每條記錄,分別去被驅動表查詢匹配到的記錄。
2 使用索引加快連接速度
嵌套循環連接方式,對於驅動結果集中每條記錄分別去被驅動表中查詢, 如果被驅動表走的是全表查詢,
那麼驅動表結果集中有多少條記錄就會發生多少次被驅動表全表查詢, 性能是很慢的。
解決辦法: 可以對被驅動表的關聯條件列增加索引,這樣驅動表結果集中的每條記錄作爲條件時,對於被驅動表相當於一個ref 常量索引查詢,速度是很快的。
例如:
SELECT * FROM t1, t2 WHERE t1.m1 > 1 AND t1.m1 = t2.m2 AND t2.n2 < 'd';
步驟2中,根據t2.m2=2作爲常量索引查詢,回表後在根據t2.n2<'d’作爲過濾條件,最終得到最終結果。