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

分析MySQL中優(yōu)化distinct的技巧

 更新時間:2015年05月08日 09:41:15   作者:羅龍九  
這篇文章主要介紹了分析MySQL中優(yōu)化distinct的技巧,主要是通過減少本地掃描的次數(shù)來進行優(yōu)化的方法,需要的朋友可以參考下

有這樣的一個需求:select count(distinct nick) from user_access_xx_xx;

這條sql用于統(tǒng)計用戶訪問的uv,由于單表的數(shù)據(jù)量在10G以上,即使在user_access_xx_xx上加上nick的索引,

通過查看執(zhí)行計劃,也為全索引掃描,sql在執(zhí)行的時候,會對整個服務(wù)器帶來抖動;

root@db 09:00:12>select count(distinct nick) from user_access;

+———————-+

| count(distinct nick) |

+———————-+

|        806934 |

+———————-+

1 row in set (52.78 sec)

執(zhí)行一次sql需要花費52.78s,已經(jīng)非常的慢了

現(xiàn)在需要換一種思路來解決該問題:

我們知道索引的值是按照索引字段升序的,比如我們對(nick,other_column)兩個字段做了索引,那么在索引中的則是按照nick,other_column的升序排列:

我們現(xiàn)在的sql:select count(distinct nick) from user_access;則是直接從nick1開始一條條掃描下來,直到掃描到最后一個nick_n,

那么中間過程會掃描很多重復(fù)的nick,如果我們能夠跳過中間重復(fù)的nick,則性能會優(yōu)化非常多(在oracle中,這種掃描技術(shù)為loose index scan,但在5.1的版本中,mysql中還不能直接支持這種優(yōu)化技術(shù)):

20155893909060.jpg (532×255)

所以需要通過改寫sql來達到偽loose index scan:

root@db 09:41:30>select count(*) from ( select distinct(nick) from user_access)t ;

| count(*) |

+———-+

|  806934 |

1 row in set (5.81 sec)

Sql中先選出不同的nick,最后在外面套一層,就可以得到nick的distinct值總和;

最重要的是在子查詢中:select distinct(nick) 實現(xiàn)了上圖中的偽loose index scan,優(yōu)化器在這個時候的執(zhí)行計劃為Using index for group-by ,

需要注意的是mysql把distinct優(yōu)化為group by,它首先利用索引來分組,然后掃描索引,對需要的nick只掃描一次;

兩個sql的執(zhí)行計劃分別為:

優(yōu)化寫法:

root@db 09:41:10>explain select distinct(nick) from user_access-> ;

+—-+————-+——————————+——-+—————+————-| id | select_type | table            | type | possible_keys | key               | key_len | ref | rows  | Extra          |

+—-+————-+——————————+——-+—————+————-

| 1 | SIMPLE   | user_access | range | NULL     | ind_user_access_nick | 67   | NULL | 2124695 | Using index for group-by |

+—-+————-+——————————+——-+—————+————-

原始寫法:

root@db 09:42:55>explain select count(distinct nick) from user_access;

+—-+————-+——————————+——-+—————+————-

| id | select_type | table            | type | possible_keys | key            | key_len | ref | rows   | Extra    |

+—-+————-+——————————+——-+—————+————-

| 1 | SIMPLE   | user_access | index | NULL     | ind_user_access | 177   | NULL | 19546123 | Using index |

相關(guān)文章

  • Mysql8.0輕松實現(xiàn)主從復(fù)制

    Mysql8.0輕松實現(xiàn)主從復(fù)制

    這篇文章主要介紹了Mysql8.0輕松實現(xiàn)主從復(fù)制方法的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • MySQL常見的存儲引擎和區(qū)別說明

    MySQL常見的存儲引擎和區(qū)別說明

    MySQL支持多種存儲引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每種引擎有其特點和適用場景,選擇存儲引擎時需根據(jù)業(yè)務(wù)需求考慮事務(wù)、性能、存儲成本等因素
    2025-03-03
  • mysql8.0.21下載安裝詳細教程

    mysql8.0.21下載安裝詳細教程

    這篇文章主要介紹了mysql8.0.21下載安裝詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 正確使用MySQL update語句

    正確使用MySQL update語句

    今天我們主要向大家講述的是MySQL update 語句的實際用法,以及在實際操作中哪些相關(guān)的操作步驟是值得我們大家注意的。
    2015-08-08
  • 修改Mysql索引長度限制解決767?byte限制問題

    修改Mysql索引長度限制解決767?byte限制問題

    這篇文章主要介紹了修改Mysql索引長度限制解決767?byte限制問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 淺談mysql 自定義函數(shù)

    淺談mysql 自定義函數(shù)

    本文主要是分析了一下在工作中寫的一個mysql的自定義函數(shù),很簡單,僅僅是希望能對大家理解mysql自定義函數(shù)有所幫助。
    2014-09-09
  • 深入解讀Mysql查詢性能的優(yōu)化

    深入解讀Mysql查詢性能的優(yōu)化

    這篇文章主要介紹了深入解讀Mysql查詢性能的優(yōu)化,如果想要優(yōu)化查詢,就需要優(yōu)化其子任務(wù),要么你就消除其中的一些子任務(wù),要么就減少子任務(wù)的執(zhí)行次數(shù),要么就讓子任務(wù)運行的更快,需要的朋友可以參考下
    2023-07-07
  • IDEA的database插件無法連接mysql的解決辦法(08001錯誤)

    IDEA的database插件無法連接mysql的解決辦法(08001錯誤)

    用navicat鏈接數(shù)據(jù)庫正常,mysql控制臺操作正常,但是用IDEA的數(shù)據(jù)庫插件鏈接一直報 08001 錯誤,本文就給大家介紹一下IDEA的database插件無法連接mysql報08001錯誤的解決辦法,需要的朋友可以參考下
    2024-07-07
  • MySQL修改密碼方法匯總

    MySQL修改密碼方法匯總

    本文中小編給大家匯總介紹了MySQL修改密碼的方法,分為MySQL5.7版本之前以及MySQL5.7版本之后的修改方法,有需要的小伙伴可以參考下
    2018-08-08
  • navicat連接Mysql數(shù)據(jù)庫報2013錯誤解決辦法

    navicat連接Mysql數(shù)據(jù)庫報2013錯誤解決辦法

    這篇文章主要介紹了navicat連接Mysql數(shù)據(jù)庫報2013錯誤的解決辦法,首先檢查MySQL是否安裝成功,然后修改配置文件,添加或注釋掉特定行,最后連接進入MySQL服務(wù)并執(zhí)行授權(quán)命令,需要的朋友可以參考下
    2025-02-02

最新評論

柳江县| 新津县| 文成县| 永胜县| 灵石县| 庐江县| 贞丰县| 南部县| 兴文县| 安化县| 兖州市| 沐川县| 内黄县| 章丘市| 新沂市| 喀喇沁旗| 泗洪县| 林甸县| 台中县| 阿鲁科尔沁旗| 金阳县| 新余市| 平泉县| 福泉市| 信丰县| 达日县| 东莞市| 巫溪县| 建阳市| 怀柔区| 额敏县| 板桥市| 曲阜市| 若羌县| 福安市| 贺兰县| 大冶市| 西宁市| 辰溪县| 闵行区| 萨嘎县|