共計(jì) 950 個(gè)字符,預(yù)計(jì)需要花費(fèi) 3 分鐘才能閱讀完成。
今天丸趣 TV 小編給大家分享一下 MySQL 多表關(guān)聯(lián) on 和 where 速度源碼對比分析的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
先說結(jié)論
Where、對等查詢的 join 速度基本一致,不對等查詢時(shí)一般 join 更慢。
實(shí)驗(yàn) 1:不存在不等記錄
我們有兩張表,分別是 member 和 member_class,數(shù)據(jù)結(jié)構(gòu)如下圖,其中 member.class_id 和 member_class.id 是關(guān)聯(lián)字段
我們分別向兩張表寫入了 20 萬條數(shù)據(jù),其中 member.class_id 都一定存在于 member_class.id 中(不存在不等記錄)
查全表
為了實(shí)驗(yàn)更加相對準(zhǔn)確,我們對每條結(jié)果查詢 20 次:
where 查詢耗時(shí)分別為(秒):
0.253, 0.256, 0.256, 0.252, 0.257, 0.252, 0.260, 0.265, 0.253, 0.252, 0.254, 0.257, 0.254, 0.257, 0.243, 0.250, 0.252, 0.252, 0.255, 0.284
on 查詢耗時(shí)分別為(秒):
0.247, 0.260, 0.250, 0.246, 0.271, 0.247, 0.251, 0.247, 0.243, 0.247, 0.247, 0.245, 0.249, 0.246, 0.247, 0.253, 0.248, 0.254, 0.251, 0.247, 0.250
where 查詢平均為 0.2557s,on 查詢平均為 0.2498s;兩者基本一致,相差幾乎可以忽略。
實(shí)驗(yàn) 2:存在不等記錄
我們新建一個(gè) member_v2 表,其中 class_id 只有 20% 是 member_class.id 中存在的
如下圖:
我們繼續(xù)查詢?nèi)頊y試:
能看出來非常明顯的差距,LEFT JOIN 由于存在大量不等記錄,出現(xiàn)大量的 NULL 值,此時(shí)中間表查詢效率變得更低,而選擇 WHERE 查詢能夠在查詢時(shí)自動過濾不等記錄。
所以查詢時(shí)間也更快一些。
以上就是“MySQL 多表關(guān)聯(lián) on 和 where 速度源碼對比分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,丸趣 TV 小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注丸趣 TV 行業(yè)資訊頻道。