MySQL多表關聯(lián)on和where速度對比實測看誰更快
今天發(fā)現(xiàn)有人在討論:兩張MySQL的數(shù)據(jù)表按照某一個字段進行關聯(lián)的時候查詢,我們使用on和where哪種查詢方式更快。
百聞不如一見,我們來親自測試下。
先說結論
Where、對等查詢的join速度基本一致,不對等查詢時一般join更慢。
實驗1:不存在不等記錄
我們有兩張表,分別是member和member_class,數(shù)據(jù)結構如下圖,其中 member.class_id 和 member_class.id 是關聯(lián)字段
我們分別向兩張表寫入了20萬條數(shù)據(jù),其中member.class_id 都一定存在于member_class.id中(不存在不等記錄)
查全表
為了實驗更加相對準確,我們對每條結果查詢20次:
where查詢耗時分別為(秒):
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查詢耗時分別為(秒):
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;兩者基本一致,相差幾乎可以忽略。
實驗2:存在不等記錄
我們新建一個member_v2表,其中class_id只有20%是member_class.id中存在的
如下圖:
我們繼續(xù)查詢?nèi)頊y試:
能看出來非常明顯的差距,LEFT JOIN由于存在大量不等記錄,出現(xiàn)大量的NULL值,此時中間表查詢效率變得更低,而選擇WHERE查詢能夠在查詢時自動過濾不等記錄。
所以查詢時間也更快一些。
總結
在對等查詢過程中,ON的查詢更快;在不對等查詢時,WHERE更快。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
MySQL中Order By多字段排序規(guī)則代碼示例
這篇文章主要介紹了MySQL中Order By多字段排序規(guī)則代碼示例,小編覺得挺不錯的,這里給大家分享下,需要的朋友可以參考。2017-10-10MYSQL數(shù)據(jù)插入之返回自增主鍵ID的方法詳解
這篇文章主要介紹了MYSQL數(shù)據(jù)插入之返回自增主鍵ID的方法詳解,mysql中的insert插入之后會有返回值,返回的是影響的行數(shù),也就是說,成功插入一條數(shù)據(jù)之后返回的是1,失敗則返回0,那么,很多時候我們都想要得到最后插入的id值,需要的朋友可以參考下2023-10-10mysql kill進程后出現(xiàn)killed死鎖問題及解決
這篇文章主要介紹了mysql kill進程后出現(xiàn)killed死鎖問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01