亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > MySQL巧用sum、case和when優化統計查詢

MySQL巧用sum、case和when優化統計查詢

熱門標簽:地圖標注費用是多少 曲靖移動外呼系統公司 武漢網絡外呼系統服務商 南昌三維地圖標注 外呼系統打電話上限是多少 電話外呼系統改號 怎樣在地圖標注銷售區域 啥是企業400電話辦理 百應電話機器人優勢

最近在公司做項目,涉及到開發統計報表相關的任務,由于數據量相對較多,之前寫的查詢語句查詢五十萬條數據大概需要十秒左右的樣子,后來經過老大的指點利用sum,case...when...重寫SQL性能一下子提高到一秒鐘就解決了。這里為了簡潔明了的闡述問題和解決的方法,我簡化一下需求模型。

現在數據庫有一張訂單表(經過簡化的中間表),表結構如下:

CREATE TABLE `statistic_order` (
 `oid` bigint(20) NOT NULL,
 `o_source` varchar(25) DEFAULT NULL COMMENT '來源編號',
 `o_actno` varchar(30) DEFAULT NULL COMMENT '活動編號',
 `o_actname` varchar(100) DEFAULT NULL COMMENT '參與活動名稱',
 `o_n_channel` int(2) DEFAULT NULL COMMENT '商城平臺',
 `o_clue` varchar(25) DEFAULT NULL COMMENT '線索分類',
 `o_star_level` varchar(25) DEFAULT NULL COMMENT '訂單星級',
 `o_saledep` varchar(30) DEFAULT NULL COMMENT '營銷部',
 `o_style` varchar(30) DEFAULT NULL COMMENT '車型',
 `o_status` int(2) DEFAULT NULL COMMENT '訂單狀態',
 `syctime_day` varchar(15) DEFAULT NULL COMMENT '按天格式化日期',
 PRIMARY KEY (`oid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

項目需求是這樣的:

統計某段時間范圍內每天的來源編號數量,其中來源編號對應數據表中的o_source字段,字段值可能為CDE,SDE,PDE,CSE,SSE。

來源分類隨時間流動

一開始寫了這樣一段SQL:

select S.syctime_day,
 (select count(*) from statistic_order SS where SS.syctime_day = S.syctime_day and SS.o_source = 'CDE') as 'CDE',
 (select count(*) from statistic_order SS where SS.syctime_day = S.syctime_day and SS.o_source = 'CDE') as 'SDE',
 (select count(*) from statistic_order SS where SS.syctime_day = S.syctime_day and SS.o_source = 'CDE') as 'PDE',
 (select count(*) from statistic_order SS where SS.syctime_day = S.syctime_day and SS.o_source = 'CDE') as 'CSE',
 (select count(*) from statistic_order SS where SS.syctime_day = S.syctime_day and SS.o_source = 'CDE') as 'SSE'
 from statistic_order S where S.syctime_day > '2016-05-01' and S.syctime_day  '2016-08-01' 
 GROUP BY S.syctime_day order by S.syctime_day asc;

這種寫法采用了子查詢的方式,在沒有加索引的情況下,55萬條數據執行這句SQL,在workbench下等待了將近十分鐘,最后報了一個連接中斷,通過explain解釋器可以看到SQL的執行計劃如下:

每一個查詢都進行了全表掃描,五個子查詢DEPENDENT SUBQUERY說明依賴于外部查詢,這種查詢機制是先進行外部查詢,查詢出group by后的日期結果,然后子查詢分別查詢對應的日期中CDE,SDE等的數量,其效率可想而知。

在o_source和syctime_day上加上索引之后,效率提高了很多,大概五秒鐘就查詢出了結果:

查看執行計劃發現掃描的行數減少了很多,不再進行全表掃描了:

這當然還不夠快,如果當數據量達到百萬級別的話,查詢速度肯定是不能容忍的。一直在想有沒有一種辦法,能否直接遍歷一次就查詢出所有的結果,類似于遍歷java中的list集合,遇到某個條件就計數一次,這樣進行一次全表掃描就可以查詢出結果集,結果索引,效率應該會很高。在老大的指引下,利用sum聚合函數,加上case...when...then...這種“陌生”的用法,有效的解決了這個問題。
具體SQL如下:

 select S.syctime_day,
 sum(case when S.o_source = 'CDE' then 1 else 0 end) as 'CDE',
 sum(case when S.o_source = 'SDE' then 1 else 0 end) as 'SDE',
 sum(case when S.o_source = 'PDE' then 1 else 0 end) as 'PDE',
 sum(case when S.o_source = 'CSE' then 1 else 0 end) as 'CSE',
 sum(case when S.o_source = 'SSE' then 1 else 0 end) as 'SSE'
 from statistic_order S where S.syctime_day > '2015-05-01' and S.syctime_day  '2016-08-01' 
 GROUP BY S.syctime_day order by S.syctime_day asc;

關于MySQL中case...when...then的用法就不做過多的解釋了,這條SQL很容易理解,先對一條一條記錄進行遍歷,group by對日期進行了分類,sum聚合函數對某個日期的值進行求和,重點就在于case...when...then對sum的求和巧妙的加入了條件,當o_source = 'CDE'的時候,計數為1,否則為0;當o_source='SDE'的時候......

這條語句的執行只花了一秒多,對于五十多萬的數據進行這樣一個維度的統計還是比較理想的。

通過執行計劃發現,雖然掃描的行數變多了,但是只進行了一次全表掃描,而且是SIMPLE簡單查詢,所以執行效率自然就高了:

針對這個問題,如果大家有更好的方案或思路,歡迎留言

總結

到此這篇關于MySQL巧用sum、case和when優化統計查詢的文章就介紹到這了,更多相關MySQL優化統計查詢內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • SQL Server中使用判斷語句(IF ELSE/CASE WHEN )案例
  • 解決mybatis case when 報錯的問題
  • Oracle用decode函數或CASE-WHEN實現自定義排序
  • MySQL case when使用方法實例解析
  • 一篇文章帶你了解SQL之CASE WHEN用法詳解

標簽:甘南 荊州 吉林 黑河 隨州 錦州 滄州 資陽

巨人網絡通訊聲明:本文標題《MySQL巧用sum、case和when優化統計查詢》,本文關鍵詞  MySQL,巧用,sum,case,和,when,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL巧用sum、case和when優化統計查詢》相關的同類信息!
  • 本頁收集關于MySQL巧用sum、case和when優化統計查詢的相關信息資訊供網民參考!
  • 推薦文章
    免费的黄色小视频| 成人高清视频在线观看| 青青青草视频在线观看| 精品国产一区二区三区久| 麻豆系列国产剧在线观看| 999久久狠狠免费精品| 亚飞与亚基在线观看| 日韩免费片| 国产不卡在线播放| 天天色色色| 日韩在线观看免费完整版视频| 韩国三级视频网站| 国产激情一区二区三区| 免费的黄视频| 四虎精品在线观看| 日日日夜夜操| 久久国产精品自线拍免费| 色综合久久天天综合绕观看| 国产精品自拍在线观看| 欧美爱色| 国产伦理精品| 国产网站麻豆精品视频| 免费的黄色小视频| 一a一级片| 免费一级片网站| 999久久狠狠免费精品| 99久久精品国产高清一区二区| 精品久久久久久中文字幕一区| 成人免费观看网欧美片| 亚欧成人毛片一区二区三区四区| 国产视频网站在线观看| 日韩欧美一及在线播放| 久久国产精品永久免费网站| 尤物视频网站在线| 美女免费精品高清毛片在线视| 久草免费在线视频| 国产国语在线播放视频| 欧美a级大片| 超级乱淫伦动漫| 亚洲天堂免费| 国产精品免费精品自在线观看| 亚欧成人毛片一区二区三区四区| 成人高清护士在线播放| 成人影视在线播放| 欧美激情一区二区三区视频 | 久草免费在线观看| 沈樵在线观看福利| 欧美a级片视频| 美女被草网站| 精品视频一区二区| 99热精品在线| 午夜欧美成人久久久久久| 99色视频在线| 亚洲天堂免费| 精品国产亚洲人成在线| 亚欧乱色一区二区三区| a级毛片免费观看网站| 午夜激情视频在线观看| 亚洲爆爽| 色综合久久天天综合绕观看| a级毛片免费观看网站| 精品国产亚洲一区二区三区| 亚洲精品久久久中文字| 精品国产三级a∨在线观看| 青青久久网| 日韩一级黄色| 国产韩国精品一区二区三区| 日韩在线观看视频网站| 韩国三级视频在线观看| 国产高清视频免费| 欧美激情影院| 天天做日日干| 一级毛片看真人在线视频| 久久99中文字幕| 成人免费观看的视频黄页| 国产伦理精品| 日韩一级精品视频在线观看| 91麻豆精品国产综合久久久| 成人高清免费| 日本特黄特黄aaaaa大片| 久久精品大片| 国产网站免费观看| 99热精品一区| 青青青草影院| 国产亚洲精品aaa大片| 国产91精品系列在线观看| 欧美大片毛片aaa免费看| 深夜做爰性大片中文| 999精品视频在线| 亚洲爆爽| 亚洲女人国产香蕉久久精品| 欧美18性精品| 国产一区二区精品| 韩国三级视频网站| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日韩中文字幕在线播放| 久久福利影视| 成人免费高清视频| 色综合久久天天综合| 午夜欧美福利| 国产精品自拍亚洲| 国产欧美精品| 国产一区国产二区国产三区| 一级毛片看真人在线视频| 成人免费一级毛片在线播放视频| 亚洲www美色| 日日日夜夜操| 黄色免费三级| 日本在线播放一区| 超级乱淫伦动漫| 999久久狠狠免费精品| 精品视频在线观看视频免费视频| 久久精品免视看国产成人2021| 欧美一级视频免费| 黄视频网站免费| 韩国三级视频网站| 韩国毛片免费大片| 日韩中文字幕一区二区不卡| 你懂的福利视频| 超级乱淫黄漫画免费| 91麻豆精品国产综合久久久| a级毛片免费观看网站| 国产a网| 一级毛片看真人在线视频| 国产91素人搭讪系列天堂| 国产视频一区二区在线观看| 国产国语对白一级毛片| 国产亚洲精品aaa大片| 久久精品大片| 精品国产三级a∨在线观看| 国产国语对白一级毛片| 四虎论坛| 99久久精品国产国产毛片| 天天做日日爱| 国产视频一区二区在线播放| 在线观看导航| 国产不卡在线观看视频| 一级毛片视频免费| 久久久成人影院| 国产极品精频在线观看| 精品视频在线观看一区二区| 日本特黄一级| a级精品九九九大片免费看| 日本在线播放一区| 四虎精品在线观看| 午夜欧美成人久久久久久| 成人高清护士在线播放| 国产国语对白一级毛片| 你懂的福利视频| 日日日夜夜操| 亚洲天堂一区二区三区四区| 欧美大片一区| 日韩中文字幕一区| 亚洲天堂免费观看| 黄视频网站免费看| 国产麻豆精品高清在线播放| 亚洲天堂一区二区三区四区| 国产网站免费观看| 免费一级片在线观看| 日韩欧美一二三区| 国产成人精品影视| 日韩在线观看视频黄| 一本伊大人香蕉高清在线观看| 日韩一级黄色| 欧美a级大片| 欧美激情一区二区三区在线 | 天天做人人爱夜夜爽2020| 麻豆系列 在线视频| 成人免费网站久久久| 成人免费观看视频| 日韩一级黄色| 日韩中文字幕一区| 日本免费区| 日韩在线观看视频免费| 韩国毛片 免费| 久草免费在线色站| 久久久久久久久综合影视网| 久草免费在线视频| 亚洲精品久久玖玖玖玖| 亚洲www美色| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 精品视频在线看| 999久久66久6只有精品| 中文字幕一区二区三区精彩视频 | 精品视频在线看| 亚洲 国产精品 日韩| 黄色短视频网站| 国产国语对白一级毛片| 成人影视在线观看| 成人高清护士在线播放| 黄视频网站在线看| 午夜在线影院| 日韩中文字幕在线播放| 国产一区二区精品久久91| 精品久久久久久免费影院| 青青久久精品| 久久国产精品自由自在| 日日夜夜婷婷| 欧美激情一区二区三区在线| 久草免费在线观看|