最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在MySQL中使用STRAIGHT_JOIN的教程

 更新時(shí)間:2015年05月30日 12:11:21   投稿:goldensun  
這篇文章主要介紹了在MySQL中使用STRAIGHT_JOIN的教程,包括使用STRAIGHT_JOIN進(jìn)行一些性能上的優(yōu)化的技巧,需要的朋友可以參考下

問(wèn)題

   通過(guò)「SHOW FULL PROCESSLIST」語(yǔ)句很容易就能查到問(wèn)題SQL,如下:

SELECT post.*
FROM post
INNER JOIN post_tag ON post.id = post_tag.post_id
WHERE post.status = 1 AND post_tag.tag_id = 123
ORDER BY post.created DESC
LIMIT 100

   說(shuō)明:因?yàn)閜ost和tag是多對(duì)多的關(guān)系,所以存在一個(gè)關(guān)聯(lián)表post_tag。

   試著用EXPLAIN查詢一下SQL執(zhí)行計(jì)劃(篇幅所限,結(jié)果有刪減):

+----------+---------+-------+-----------------------------+
| table  | key   | rows | Extra            |
+----------+---------+-------+-----------------------------+
| post_tag | tag_id | 71220 | Using where; Using filesort |
| post   | PRIMARY |   1 | Using where         |
+----------+---------+-------+-----------------------------+

   下面給出優(yōu)化后的SQL,唯一的變化就是把連接方式改成了「STRAIGHT_JOIN」:

SELECT post.*
FROM post
STRAIGHT_JOIN post_tag ON post.id = post_tag.post_id
WHERE post.status = 1 AND post_tag.tag_id = 123
ORDER BY post.created DESC
LIMIT 100

   試著用EXPLAIN查詢一下SQL執(zhí)行計(jì)劃(篇幅所限,結(jié)果有刪減):

+----------+----------------+--------+-------------+
| table  | key      | rows  | Extra    |
+----------+----------------+--------+-------------+
| post   | status_created | 119340 | Using where |
| post_tag | post_id    |   1 | Using where |
+----------+----------------+--------+-------------+

   對(duì)比優(yōu)化前后兩次EXPLAIN的結(jié)果來(lái)看,優(yōu)化后的SQL雖然「rows」更大了,但是沒(méi)有了「Using filesort」,綜合來(lái)看,性能依然得到了提升。
解釋

   對(duì)第一條SQL而言,為什么MySQL優(yōu)化器選擇了一個(gè)耗時(shí)的執(zhí)行方案?對(duì)第二條SQL而言,為什么把連接方式改成STRAIGHT_JOIN之后就提升了性能?

   這一切還得從MySQL對(duì)多表連接的處理方式說(shuō)起,首先要確定以誰(shuí)為驅(qū)動(dòng)表,也就是說(shuō)以哪個(gè)表為基準(zhǔn),在處理此類問(wèn)題時(shí),MySQL優(yōu)化器采用了簡(jiǎn)單粗暴的解決方法:哪個(gè)表的結(jié)果集小,就以哪個(gè)表為驅(qū)動(dòng)表,通常這都是最佳選擇。

   說(shuō)明:在EXPLAIN結(jié)果中,第一行出現(xiàn)的表就是驅(qū)動(dòng)表。

   繼續(xù)post連接post_tag的例子,MySQL優(yōu)化器有如下兩個(gè)選擇,分別是:

  1.     以post為驅(qū)動(dòng)表,通過(guò)status_created索引過(guò)濾,結(jié)果集119340行
  2.     以post_tag為驅(qū)動(dòng)表,通過(guò)tag_id索引過(guò)濾,結(jié)果集71220行

       顯而易見(jiàn),post_tag過(guò)濾的結(jié)果集更小,所以MySQL優(yōu)化器選擇它作為驅(qū)動(dòng)表,可悲催的是我們還需要以post表中的created字段來(lái)排序,也就是說(shuō)排序字段不在驅(qū)動(dòng)表里,于是乎不可避免的出現(xiàn)了「Using filesort」,從而導(dǎo)致慢查詢。

       知道了來(lái)龍去脈,優(yōu)化起來(lái)就容易了。頭等大事是務(wù)必保證排序字段在驅(qū)動(dòng)表中,所以必須以post是驅(qū)動(dòng)表,于是乎「STRAIGHT_JOIN」就成了答案,它強(qiáng)制了連接順序。

       …

       不過(guò)我總覺(jué)得「STRAIGHT_JOIN」這種非標(biāo)準(zhǔn)的語(yǔ)法屬于奇技淫巧的范疇,能不用盡量不用,畢竟多數(shù)情況下,MySQL優(yōu)化器都能做出正確的選擇。

相關(guān)文章

  • mysql使用SQLyog導(dǎo)入csv數(shù)據(jù)不成功的解決方法

    mysql使用SQLyog導(dǎo)入csv數(shù)據(jù)不成功的解決方法

    給mysql導(dǎo)入數(shù)據(jù),選中某個(gè)表選擇導(dǎo)入--導(dǎo)入使用本地csv數(shù)據(jù)即可,單有的時(shí)候不知道什么問(wèn)題導(dǎo)入不成功
    2014-07-07
  • mysql 5.7.14 下載安裝配置方法圖文教程

    mysql 5.7.14 下載安裝配置方法圖文教程

    這篇文章主要為大家分享了mysql 5.7.14 下載安裝配置方法圖文教程,感興趣的朋友可以參考一下
    2016-08-08
  • MySQL使用的常見(jiàn)問(wèn)題解決與應(yīng)用技巧匯總

    MySQL使用的常見(jiàn)問(wèn)題解決與應(yīng)用技巧匯總

    這篇文章主要給大家總結(jié)介紹了我們平時(shí)在使用MySQL遇到的常見(jiàn)問(wèn)題解決與應(yīng)用技巧的相關(guān)資料,包括忘記MySQL的root密碼、如何處理 myisam 存儲(chǔ)引擎的表?yè)p壞、數(shù)據(jù)目錄磁盤空間不足的問(wèn)題等等問(wèn)題,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-11-11
  • Ubuntu 18.04下mysql 8.0 安裝配置方法圖文教程

    Ubuntu 18.04下mysql 8.0 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了Ubuntu 18.04下mysql 8.0 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • MySql常用查詢命令操作大全

    MySql常用查詢命令操作大全

    本文給大家收集整理了MySql常用查詢命令操作大全,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-11-11
  • windows server2014 安裝 Mysql Applying Security出錯(cuò)的完美解決方法

    windows server2014 安裝 Mysql Applying Security出錯(cuò)的完美解決方法

    這篇文章給大家介紹了windows server2014 安裝 Mysql Applying Security出錯(cuò)的完美解決方法,造成這種問(wèn)題的主要原因是因?yàn)榘惭b一遍之后沒(méi)有卸載干凈,要解決這個(gè)問(wèn)題需要注意以下幾點(diǎn),具體解決方法,大家參考下本文
    2017-07-07
  • MySQL校對(duì)規(guī)則沖突解決方案

    MySQL校對(duì)規(guī)則沖突解決方案

    MySQL錯(cuò)誤1267表明在比較兩個(gè)字段時(shí),它們的校對(duì)規(guī)則不一致,本文主要介紹了MySQL校對(duì)規(guī)則沖突解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • Centos7使用yum安裝Mysql5.7.19的詳細(xì)步驟

    Centos7使用yum安裝Mysql5.7.19的詳細(xì)步驟

    本篇文章主要介紹了Centos7使用yum安裝Mysql5.7.19的詳細(xì)步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • ?SQL 中 CASE 表達(dá)式的使用方式

    ?SQL 中 CASE 表達(dá)式的使用方式

    這篇文章主要介紹了?SQL 中 CASE 表達(dá)式的使用方式,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • mysql 8.0.18 安裝配置方法圖文教程(linux)

    mysql 8.0.18 安裝配置方法圖文教程(linux)

    這篇文章主要介紹了linux下mysql 8.0.18 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11

最新評(píng)論

大厂| 吉安县| 贵州省| 锡林郭勒盟| 太白县| 桐庐县| 抚顺市| 依安县| 英山县| 新津县| 舞钢市| 澄江县| 嘉义市| 东丽区| 壤塘县| 广丰县| 吴桥县| 麻江县| 永修县| 阿拉尔市| 萨嘎县| 十堰市| 乌拉特后旗| 大洼县| 宣威市| 永泰县| 庄浪县| 富宁县| 呼伦贝尔市| 运城市| 称多县| 阿坝县| 西乌| 开封县| 缙云县| 西乡县| 肥东县| 荔浦县| 赤城县| 永川市| 哈巴河县|