<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答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
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        使用子查詢可提升COUNTDISTINCT速度50倍_MySQL

        來源:懂視網 責編:小采 時間:2020-11-09 20:12:21
        文檔

        使用子查詢可提升COUNTDISTINCT速度50倍_MySQL

        使用子查詢可提升COUNTDISTINCT速度50倍_MySQL:注:這些技術是通用的,只不過我們選擇使用Postgres的語法。使用獨特的pgAdminIII生成解釋圖形。 很有用,但太慢 Count distinct是SQL分析時的禍根,因此它是我第一篇博客的不二選擇。 首先:如果你有一個大的且能夠容忍不精確的數據集,那像HyperL
        推薦度:
        導讀使用子查詢可提升COUNTDISTINCT速度50倍_MySQL:注:這些技術是通用的,只不過我們選擇使用Postgres的語法。使用獨特的pgAdminIII生成解釋圖形。 很有用,但太慢 Count distinct是SQL分析時的禍根,因此它是我第一篇博客的不二選擇。 首先:如果你有一個大的且能夠容忍不精確的數據集,那像HyperL
          注:這些技術是通用的,只不過我們選擇使用Postgres的語法。使用獨特的pgAdminIII生成解釋圖形。

          很有用,但太慢

          Count distinct是SQL分析時的禍根,因此它是我第一篇博客的不二選擇。

          首先:如果你有一個大的且能夠容忍不精確的數據集,那像HyperLogLog這樣的概率計數器應該是你最好的選擇。(我們會在以后的博客中談到HyperLogLog。)但對于需要快速、精準答案的查詢,一些簡單的子查詢可以節省你很多時間。

          讓我們以我們一直使用的一個簡單查詢開始:哪個圖表的用戶訪問量最大?

        select 
         dashboards.name, 
         count(distinct time_on_site_logs.user_id)
        from time_on_site_logs 
        join dashboards on time_on_site_logs.dashboard_id = dashboards.id
        group by name 
        order by count desc

          首先,我們假設user_id和dashboard_id上已經設置了索引,且有比圖表和用戶數多得多的日志條目。

          一千萬行數據時,查詢需要48秒。要知道原因讓我們看一下SQL解析:

        Explain Slow

          它慢是因為數據庫遍歷了所有日志以及所有的圖表,然后join它們,再將它們排序,這些都在真正的group和分組和聚合工作之前。

          先聚合,然后Join

          group-聚合后的任何工作代價都要低,因為數據量會更小。group-聚合時我們不需使用dashboards.name,我們也可以先在數據庫上做聚集,在join之前:

        select
         dashboards.name,
         log_counts.ct
        from dashboards
        join (
         select
         dashboard_id,
         count(distinct user_id) as ct
         from time_on_site_logs 
         group by dashboard_id
        ) as log_counts 
        on log_counts.dashboard_id = dashboards.id
        order by log_counts.ct desc

          現在查詢運行了20秒,提升了2.4倍。再次通過解析來看一下原因:

          正如設計的,group-聚合在join之前。而且,額外的我們可以利用time_on_site_logs表里的索引。

          首先,縮小數據集

          我們可以做的更好。通過在整個日志表上group-聚合,我們處理了數據庫中很多不必要的數據。Count distinct為每個group生成一個哈希——在本次環境中為每個dashboard_id——來跟蹤哪些bucket中的哪些值已經檢查過。

          我們可以預先計算差異,而不是處理全部數據,這樣只需要一個哈希集合。然后我們在此基礎上做一個簡單的聚集即可。

        select
         dashboards.name,
         log_counts.ct
        from dashboards 
        join (
         select distinct_logs.dashboard_id, 
         count(1) as ct
         from (
         select distinct dashboard_id, user_id
         from time_on_site_logs
         ) as distinct_logs
         group by distinct_logs.dashboard_id
        ) as log_counts 
        on log_counts.dashboard_id = dashboards.id
        order by log_counts.ct desc

          我們采取內部的count-distinct-group,然后將數據拆成兩部分分成兩塊。第一塊計算distinct (dashboard_id, user_id) 。第二塊在它們基礎上運行一個簡單group-count。跟上面一樣,最后再join。

          呵呵,大發現:這樣只需要0.7秒!這比上面的查詢快28倍,比原來的快了68倍。

          通常,數據大小和類型很重要。上面的例子受益于基數中沒多少換算。distinct (user_id, dashboard_id)相對于數據總量來說數量也很少。不同的對數越多,用來group和計數的唯一數據就越多——代價便會越來越大。

          下一遇到長時間運行的count distinct時,嘗試一些子查詢來減負吧。

          原文地址:https://periscope.io/blog/use-subqueries-to-count-distinct-50x-faster.html

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        使用子查詢可提升COUNTDISTINCT速度50倍_MySQL

        使用子查詢可提升COUNTDISTINCT速度50倍_MySQL:注:這些技術是通用的,只不過我們選擇使用Postgres的語法。使用獨特的pgAdminIII生成解釋圖形。 很有用,但太慢 Count distinct是SQL分析時的禍根,因此它是我第一篇博客的不二選擇。 首先:如果你有一個大的且能夠容忍不精確的數據集,那像HyperL
        推薦度:
        標簽: 速度 mysql count
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: xxxxx做受大片视频免费| 含羞草国产亚洲精品岁国产精品| 黄 色一级 成 人网站免费| 永久黄网站色视频免费直播| 国产成人精品日本亚洲11| 两性刺激生活片免费视频| 亚洲一区二区免费视频| 久久精品免费一区二区喷潮| www.亚洲日本| 精品国产一区二区三区免费看| 色九月亚洲综合网| 亚洲精品无码AV中文字幕电影网站| 午夜亚洲国产精品福利| 中文亚洲AV片不卡在线观看| 91视频免费观看| 亚洲春色另类小说| 精品国产免费观看一区| 污网站在线观看免费| 亚洲av永久无码精品漫画 | 久久精品国产亚洲香蕉| 亚洲精品在线免费看| 最新亚洲卡一卡二卡三新区| 青青青国产免费一夜七次郎 | A在线观看免费网站大全| 亚洲色无码国产精品网站可下载| 免费看国产精品麻豆| 另类免费视频一区二区在线观看| 亚洲最大黄色网站| 亚洲Av无码乱码在线播放| a毛看片免费观看视频| 亚洲国产精品成人综合色在线婷婷| 在线观看免费成人| 中文字幕免费在线播放| 亚洲人成人77777网站不卡| 国产又长又粗又爽免费视频| 热99RE久久精品这里都是精品免费| 亚洲国产成人在线视频| 免费人成视频在线观看不卡| 久久国产乱子伦免费精品| 亚洲av成人一区二区三区观看在线| 亚洲国产婷婷六月丁香|