国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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
當前位置: 首頁 - 科技 - 知識百科 - 正文

mysql中orderby優化的那些事兒

來源:懂視網 責編:小采 時間:2020-11-09 15:35:34
文檔

mysql中orderby優化的那些事兒

mysql中orderby優化的那些事兒:后臺添加一系列的統計功能,遇到很多需要按條件計數的情況。嘗試了幾種方法,下面簡要記錄,供大家參考。 問題描述 為使討論簡單易懂,我將問題稍作簡化,去掉諸多的背景。 從前有一個皇帝,他有50個妃子,這些妃子很沒有天理的給他生了100,000個兒子,于是
推薦度:
導讀mysql中orderby優化的那些事兒:后臺添加一系列的統計功能,遇到很多需要按條件計數的情況。嘗試了幾種方法,下面簡要記錄,供大家參考。 問題描述 為使討論簡單易懂,我將問題稍作簡化,去掉諸多的背景。 從前有一個皇帝,他有50個妃子,這些妃子很沒有天理的給他生了100,000個兒子,于是

方法1:使用GROUP BY

SQL Query

  1. SELECT COUNT(*) FROM `prince` GROUP BY `mother` > 24;

執行結果

  1. count(*)
  2. 50029
  3. 49971

在100,000行數據上的運行時間:0.0335 秒

分析

這種GROUP BY方法的最大問題在于:無法區分所得到的結果。這兩個數字哪一個是天宮娘娘們所生的皇子數,哪一個是地宮娘娘們所生的皇子數呢?不知道。所以,盡管它統計出了總數,但是沒有什么意義。

因此,為了區分統計結果,必須要把條件 mother > 24 也作為一個字段在結果集中作為一個字段體現出來,修改后的sql如下:

  1. SELECT COUNT(*) AS `number`, `mother` > 24 AS `type` FROM `prince`GROUP BY `mother` > 24;

執行結果

  1. number type
  2. 50029 0
  3. 49971 1

條件表達式作為字段時,該字段的值就是該條件表達式的值,因此,對應我們的例子,type = 1 也就是表示 mother > 24 的值為1,因此,第二行中的數字代表地宮娘娘們所生的皇子數。

經過修改后,我們看出,天宮娘娘們略勝一籌。

優缺點

缺點是顯而易見的,由于使用了條件表達式作為分組依據,它只能做二元的劃分,對于要分成多類進行統計的情況不能夠勝任。比如要分別統計1~10號、11~24號,25號~50號妃子的產子數,就無法實現了。

另外,由于使用了GROUP BY,因此涉及到排序,執行時間上要更長。

我暫時沒有發現這種方法的優點。

方法2:使用嵌套的SELECT

使用嵌套的SELECT也可以達到目的,在每個SELECT子句中統計一個條件下的數據,然后用一個主SELECT把這些統計數據整合起來。

SQL Query

  1. SELECT
  2. ( SELECT COUNT( * ) FROM `prince` WHERE `mother` >24 ) AS `digong`,
  3. ( SELECT COUNT( * ) FROM `prince` WHERE `mother` <=24 ) AS `tiangong`

執行結果

  1. digong tiangong
  2. 49971 50029

在100,000行數據上的運行時間:0.0216 秒

分析

這種嵌套SELECT的方法非常直觀,就是分別統計各個條件下的數值,最后進行匯總,通俗易懂,跟自然語言沒啥區別了。

優缺點

優點就是直觀,而且速度也比GROUP BY要快。雖然是3條SELECT語句,看起來比GROUP BY的方案多了2條語句,但是它不涉及到排序,這就節省了很多時間。

缺點可能就是語句稍多,對語句數量有潔癖的同學可能會比較不舒服。

方法3:使用CASE WHEN

CASE WHEN語句的功能很強大,可以定義靈活的查詢條件,很適合進行分類統計。

SQL Query

  1. SELECT
  2. COUNT( CASE WHEN `mother` >24 THEN 1 ELSE NULL END ) AS `digong`,
  3. COUNT( CASE WHEN `mother` <=24 THEN 1 ELSE NULL END ) AS`tiangong`
  4. FROM prince

執行結果

  1. digong tiangong
  2. 49971 50029

在100,000行數據上的運行時間:0.02365825 秒

分析

此方法的關鍵在于

  1. COUNT( CASE WHEN `mother` >24 THEN 1 ELSE NULL END )

這里的COUNT和CASE WHEN聯合使用,做到了分類計數。先使用CASE WHEN,當滿足條件時,將字段值設置為 1, 不滿足條件時,將字段值設置為NULL,接著COUNT函數僅對非NULL字段進行計數,于是,問題解決。

優缺點

優點嘛,此方法也不涉及到排序,因此運行時間上與方法2相當,SELECT語句減少到了 1 條。

缺點就是語句比較長,對語句長度有潔癖的同學可能會比較不舒服。

總結

對于確定分類的按條件計數,可以盡量不用GROUP BY,從而避免排序動作,加速Query的執行。

如果需要根據某個字段的值進行分類,而該字段的值是可變的,比如皇帝要統計每一個妃子的產子數,而他可能不停的再娶很多妃子,這種情況下,使用方法2和方法3就不太靈光了,還是使用一個GROUP BY來得簡單便捷。

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

文檔

mysql中orderby優化的那些事兒

mysql中orderby優化的那些事兒:后臺添加一系列的統計功能,遇到很多需要按條件計數的情況。嘗試了幾種方法,下面簡要記錄,供大家參考。 問題描述 為使討論簡單易懂,我將問題稍作簡化,去掉諸多的背景。 從前有一個皇帝,他有50個妃子,這些妃子很沒有天理的給他生了100,000個兒子,于是
推薦度:
標簽: 添加 后臺 那些
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 欧洲高清一区二区三区试看 | 日韩免费高清视频 | 日本1区2区 | 亚洲天堂欧美 | 91精品一区二区三区在线观看 | 欧美精品在线免费观看 | 可以免费看的毛片 | 国产成人亚洲综合 | 免费看成人国产一区二区三区 | 久久www免费人成精品香蕉 | 久久精品国产免费中文 | 国产高清在线精品一区二区三区 | 免费视频一区二区 | 国产日韩欧美在线 | 韩国理论三级在线观看视频 | 欧美日韩亚洲综合另类ac | 国产日韩在线视频 | 99国产精品久久久久久久成人热 | 久久久久亚洲精品美女 | 91欧美在线 | 亚洲国产成人久久综合一 | 久久精品欧美日韩精品 | 久久精品国产一区二区三区不卡 | 中日韩在线 | 高清一区二区亚洲欧美日韩 | 一区二区三区免费 | 欧美日韩精品一区二区在线播放 | 欧美日韩亚洲一区二区三区在线观看 | 欧美二区三区 | a毛片免费视频 | 日韩欧美电影在线观看 | 国产中文在线观看 | 北条麻妃一区 | 日韩第一页在线观看 | 日韩无 | 中文亚洲欧美日韩无线码 | 国产精品成人一区二区不卡 | 欧美激情在线精品三区 | 一级毛片一级毛片一级级毛片 | 国产精品美女一区二区三区 | 日韩第二页 |