最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

[转][MySQL]執行順序與效率概論_MySQL

来源:动视网 责编:小采 时间:2020-11-09 18:23:40
文档

[转][MySQL]執行順序與效率概論_MySQL

[转][MySQL]執行順序與效率概論_MySQL:bitsCN.com 转载自 http://pclevin.blogspot.tw/2011/12/mysql_24.htmlMySQL執行順序如下1.FROM2.ON3.JOIN4.WHERE5.GROUP BY6.WITH CUBEor WITH ROLLUP7.HAVING8.SELECT9.DISTINCT10.ORDER BY11.TO
推荐度:
导读[转][MySQL]執行順序與效率概論_MySQL:bitsCN.com 转载自 http://pclevin.blogspot.tw/2011/12/mysql_24.htmlMySQL執行順序如下1.FROM2.ON3.JOIN4.WHERE5.GROUP BY6.WITH CUBEor WITH ROLLUP7.HAVING8.SELECT9.DISTINCT10.ORDER BY11.TO


bitsCN.com

转载自 http://pclevin.blogspot.tw/2011/12/mysql_24.html

MySQL執行順序如下
1.FROM
2.ON
3.JOIN
4.WHERE
5.GROUP BY
6.WITH CUBEor WITH ROLLUP
7.HAVING
8.SELECT
9.DISTINCT
10.ORDER BY
11.TOP / LIMIT

如果想要知道自己SELECT語句的效率如何,可以在SELECT之前加上EXPLAIN 關鍵字
即可得知相關的執行順序及效率分析<此篇不對此做討論>

如上所列查詢語句有其執行的順序,所以要讓自己的查詢語句提昇效率就必須從這上述各點來下手,在此以例子直接說明
SELECT
*
FROM
user
JOIN
userProfile AS pro
ON
user.id = pro.userId
JOIN
userAgreement AS agr
ON
agr.userId = user.id
WHERE
user.birthday = '1984-06-25'
AND
pro.local = '員林'

這句SQL執行的順序是
1.FROM user
2.ON user.id = pro.userId
3.JOIN userProfile AS pro
4.ON agr.userId = user.id
5.JOIN userAgreement AS agr
6.WHERE user.birthday = '1984-06-25'
AND
pro.local = '員林'
7.SELECT *

查詢顧名思義如同在電話簿中找尋某人的名字一樣,資料量越大、所知的條件越少查詢所需時間就越長,相對的資料量越少、知道的條件越明確查詢所需的時間就越短。

那麼在這樣的執行順序下我們要怎麼讓資料量縮小以加快速度呢?
照執行順序來走
1.先碰到的就是user這個table,這個table相對於其他兩個table是否資料量最少?以此例討論的確是如此,因為user對userProfile、userAgreement都是一對多的關係,當然以user當開頭是一個好開頭。

2.接下來條件,以明確的條件來、以及少量的資料來比對大量的資料,自然就能保持較佳的查詢效率了。

3.有了明確條件以及少量資料比對的,JOIN table效率自然會比較好。

4.5.如上兩點所言,越明確的條件以及少量資料的比對,效率會更好,所以這裡值得注意的是ON agr.userId = user.id 以大量的資料去比對少量的資料,這是反其道而行會適得起反降慢速度,ON user.id = agr.userId 如果改成這樣就會變成以少量資料去比對大量資料,則又可獲得較佳的效率了。

6.當上述的TABLE都JOIN完成之後,再用WHERE來做整體的條件,一直以來都是這麼做的沒錯吧~那就錯大了!!如果條件可以在上面ON的時候就,資料量便可再更縮小,JOIN出來的TABLE就會很小甚至精準到需求的資料,有時候根本連WHERE都不用寫,那該怎麼寫呢?稍後將會把改完的SQL寫在下方給大家參考。

7.JOIN完TABLE,條件也結束了,才開始SELECT,此時會將使用者所需要的資料一一列出,大家都會用*來簡便的將一切列出,這也是降低效率的兇手之一,SELECT越明確,越少的欄位會讓整體速度稍微加快,因此在SELECT部份也盡量少濫用*,可獲得較佳的效率

透過上述幾點,將修改後的SQL寫出如下︰
SELECT
user.id,
user.username,
pro.phone,
agr.agreementEndDate
FROM
user
JOIN
userProfile AS pro
ON
user.birthday = '1984-06-25'
AND
pro.local = '員林'
AND
user.id = pro.userId
JOIN
userAgreement AS agr
ON
agr.userId = user.id

如上所示,在第一次ON的條件下就將資料量降到最少,甚至精準,如此往後JOIN就會讓資料量大為減少,最後連WHERE都不需要額外其他條件,而SELECT部份也只挑出所需的資料就好, 達到最佳的效率

總結︰資料量越小、條件越明確就能達到最好的查詢效率

bitsCN.com

文档

[转][MySQL]執行順序與效率概論_MySQL

[转][MySQL]執行順序與效率概論_MySQL:bitsCN.com 转载自 http://pclevin.blogspot.tw/2011/12/mysql_24.htmlMySQL執行順序如下1.FROM2.ON3.JOIN4.WHERE5.GROUP BY6.WITH CUBEor WITH ROLLUP7.HAVING8.SELECT9.DISTINCT10.ORDER BY11.TO
推荐度:
标签: 效率 顺序 mysql
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top