MySQL多表關聯(lián)on和where速度對比實測看誰更快
今天發(fā)現(xiàn)有人在討論:兩張MySQL的數(shù)據表按照某一個字段進行關聯(lián)的時候查詢,我們使用on和where哪種查詢方式更快。
百聞不如一見,我們來親自測試下。
先說結論
Where、對等查詢的join速度基本一致,不對等查詢時一般join更慢。
實驗1:不存在不等記錄
我們有兩張表,分別是member和member_class,數(shù)據結構如下圖,其中 member.class_id 和 member_class.id 是關聯(lián)字段


我們分別向兩張表寫入了20萬條數(shù)據,其中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ù)查詢全表測試:


能看出來非常明顯的差距,LEFT JOIN由于存在大量不等記錄,出現(xiàn)大量的NULL值,此時中間表查詢效率變得更低,而選擇WHERE查詢能夠在查詢時自動過濾不等記錄。
所以查詢時間也更快一些。
總結
在對等查詢過程中,ON的查詢更快;在不對等查詢時,WHERE更快。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
MySQL創(chuàng)建數(shù)據庫并支持中文字符的操作方法
這篇文章主要介紹了MySQL創(chuàng)建數(shù)據庫并支持中文字符的操作方法,本文給大家介紹的非常詳細,對大家的學習或工作具體一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
Mysql使用sum()函數(shù)返回null的問題詳解
MySQL的Sum()函數(shù)是用來找出所有記錄的一個字段的總和,下面這篇文章主要給大家介紹了關于Mysql使用sum()函數(shù)返回null的問題,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-01-01
SQL?Group?By分組后如何選取每組最新的一條數(shù)據
經常在分組查詢之后,需要的是分組的某行數(shù)據,例如更新時間最新的一條數(shù)據,下面這篇文章主要給大家介紹了關于SQL?Group?By分組后如何選取每組最新的一條數(shù)據的相關資料,需要的朋友可以參考下2022-10-10
Linux下MySql 1036 錯誤碼解決(1036: Table ''xxxx'' is read only)
我們在進行數(shù)據庫搬家的時候,經常會遇到(1036: Table 'xxxx' is read only)的問題,字面意思很明確,就是數(shù)據庫只有讀權限,無寫權限,那么我們來分享下我的處理辦法2014-07-07
Mysql 原生語句中save or update 的寫法匯總
這篇文章主要介紹了Mysql 原生語句中save or update 的寫法匯總,非常詳細,需要的朋友可以參考下2015-03-03
MySQL進行表之間關聯(lián)更新的實現(xiàn)方法
在實際編程工作或運維實踐中,對MySQL數(shù)據庫表進行關聯(lián)更新是一種比較常見的應用場景,針對這樣的業(yè)務場景,我們來看看有什么方法可以實現(xiàn)關聯(lián)更新,需要的朋友可以參考下2023-10-10

