mysql - SQL中JOIN与子查询的优劣
PHP中文网
PHP中文网 2017-04-17 11:06:02
0
9
841

我是个MySQL新手,在涉及多表查询时,喜欢使用子查询,简单易懂。

SELECT * FROM *** WHERE id IN (SELECT ***);

但也发现很多人用JOIN同样能实现查询结果,我想知道JOIN相比子查询,在性能方面有什么优势吗?
我该如何理解JOIN语句呢?

PHP中文网
PHP中文网

认证0级讲师

全部回覆(9)
洪涛

對於mysql,從來都不推薦使用子查詢和join。因為本身join的效率就是硬傷,一旦數據量上去效率很難保證,強烈推薦分別根據索引單表取數據,然後在程序裏麵做join,merge數據。

刘奇

如 stackoverflow 上所述。http://stackoverflow.com/questions/38...

已接受 7 票反對

我希望第一個查詢會更快,主要是因為您有一個等價項和一個顯式 JOIN。根據我的經驗,IN 是一個非常慢的運算符,因為 SQL 通常將其計算為一係列由“OR”分隔的 WHERE 子句(WHERE x=Y OR x=Z OR...)。

與 ALL THINGS SQL 一樣,您的情況可能會有所不同。速度在很大程度上取決於索引(你的兩個 ID 列上都有索引嗎?這會有很大幫助......)。

100% 確定哪個更快的唯一真正方法是打開性能跟蹤(IO 統計信息特別有用)並運行它們。確保在運行之間清除緩存!

左手右手慢动作

我沒有仔細了解過其中的差異,不過對於數據比較少(壓力不大)的情況,兩種都是可用的,估計性能差不了多少;對於數據量大的情況下,JOIN和子查詢都是不可接受的,需要額外的優化(比如用nosql做緩存什麼的)。

黄舟

我覺得小數據量無所謂,大數據量又不會用這種辦法了。

巴扎黑

小數據量無所謂,大數據量下還是極力避免吧。

PHPzhong

http://chaous.com/MySQL/2012/03/27/my...

關於MySQL IN運算之前寫過一篇文章,希望對LZ有用。

至於怎麼理解JOIN查詢,推薦LZ一本書 http://book.douban.com/subject/105696...

大家讲道理

具體性能我不清楚。不過我看別人說,是用join代替子查詢。

洪涛

子查詢就別用了,效率太差,如果是JOIN的話,它是走嵌套查詢的。小表驅動大表,且通過索引字段進行關聯。如果表記錄比較少的話,還是OK的。大的話業務邏輯中可以控製處理。

伊谢尔伦

通常用join
如果是做分析就用join

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板