首先,肯定可以用,但是使用不當可能造成查詢速度非常慢。
使用 join 的前提,需要知道 join 操作的執行流程。
比如下面的語句:
select * from t1 join t2 on (t1.a=t2.a);
mysql 的執行流程:
- 從表 t1 中讀入一行數據 R;
- 從數據行 R 中,取出 a 字段到表 t2 裏去查找;
- 取出表 t2 中滿足條件的行,跟 R 組成一行,作爲結果集的一部分;
- 重複執行步驟 1 到 3,直到表 t1 的末尾循環結束。
假如 t1 有 n 行,t2 有 m 行:
上述第 1 步的時間複雜度是 O(n),第 3 步的時間複雜度如果走索引則是 O(logm),否則是 O(m)。
如果走索引的話,總的時間複雜度就是 N + N2log2M,因此 N 的影響比較大,小表放左邊可以提升性能。
如果不走索引的話,總的時間複雜度就是 M*N,因此哪個表放左邊都是一樣的。