到底可不可以使用 join?

首先,肯定可以用,但是使用不當可能造成查詢速度非常慢。

使用 join 的前提,需要知道 join 操作的執行流程。

比如下面的語句:

select * from t1 join t2 on (t1.a=t2.a);

mysql 的執行流程:

    1. 從表 t1 中讀入一行數據 R;
    1. 從數據行 R 中,取出 a 字段到表 t2 裏去查找;
    1. 取出表 t2 中滿足條件的行,跟 R 組成一行,作爲結果集的一部分;
    1. 重複執行步驟 1 到 3,直到表 t1 的末尾循環結束。

假如 t1 有 n 行,t2 有 m 行:
上述第 1 步的時間複雜度是 O(n),第 3 步的時間複雜度如果走索引則是 O(logm),否則是 O(m)。

如果走索引的話,總的時間複雜度就是 N + N2log2M,因此 N 的影響比較大,小表放左邊可以提升性能。

如果不走索引的話,總的時間複雜度就是 M*N,因此哪個表放左邊都是一樣的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章