MySQL 優化五(關聯查詢子查詢以及 in 的效率問題)(高階篇)

huxiaobai_001發表於2020-04-11

現在我們來談談關聯查詢和子查詢的效率問題?(還得要配合具體場景具體分析 實在不行寫出兩種方案看哪種執行時間更短就用哪種)

1.對於mysql,不推薦使用子查詢和join是因為本身join的效率就是硬傷,一旦資料量很大效率就很難保證,強烈推薦分別根據索引單表取資料,然後在程式裡面做join,merge資料。

2.子查詢就更別用了,效率太差,執行子查詢時,MYSQL需要建立臨時表,查詢完畢後再刪除這些臨時表,所以,子查詢的速度會受到一定的影響,這裡多了一個建立和銷燬臨時表的過程。

3.如果是JOIN的話,它是走巢狀查詢的。小表驅動大表,且通過索引欄位進行關聯。如果表記錄比較少的話,還是OK的。大的話業務邏輯中可以控制處理。

sql優化到此結束!

現在我們來談談關聯查詢和in()的效率問題?(還得要配合具體場景具體分析 實在不行寫出兩種方案看哪種執行時間更短就用哪種)

in適合小資料量,連線查詢大資料量更優,當然多表連線查詢還是能不用就不用的,大資料量時不建議使用多表連線查詢,應用時更因該相對於當下場景來選擇

.in 和 not in 也要慎用,否則會導致全表掃描,

如:

select id from t where num in(1,2,3)

對於連續的數值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3

本作品採用《CC 協議》,轉載必須註明作者和本文連結

胡軍

相關文章