婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL Group by的優化詳解

MySQL Group by的優化詳解

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

一個標準的 Group by 語句包含排序、分組、聚合函數,比如 select a,count(*) from t group by a ;  這個語句默認使用 a 進行排序。如果 a 列沒有索引,那么就會創建臨時表來統計 a和 count(*),然后再通過 sort_buffer 按 a 進行排序。

標準的執行流程

結構:

create table t1(id int primary key, a int, b int, index(a));
delimiter ;;
create procedure idata()
begin
 declare i int;

 set i=1;
 while(i=1000)do
 insert into t1 values(i, i, i);
 set i=i+1;
 end while;
end;;
delimiter ;
call idata();

函數就是向 t1 中插入1000條語句,從(1,1,1) 到(1000,1000,1000)。

執行   select id%10 as m, count(*) as c from t1 group by m;

解析:

Using index,表示這個語句使用了覆蓋索引,選擇了索引 a,不需要回表;
Using temporary,表示使用了臨時表;
Using filesort,表示需要排序。

過程:

1、創建內存臨時表,表里有兩個字段 m 和 c,主鍵是 m;
2、掃描表 t1 的索引 a,依次取出葉子節點上的 id 值,計算 id%10 的結果,記為 x;
  1)如果臨時表中沒有主鍵為 x 的行,就插入一個記錄 (x,1);
  2)如果表中有主鍵為 x 的行,就將 x 這一行的 c 值加 1;

第2 步如果發現內存臨時表存儲的總字段長度到達參數 tmp_table_size 設置的大小,那么就會將內存臨時表升級為磁盤臨時表,然后重新開始遍歷計算。
3、遍歷完成后,再根據字段 m 做排序,得到結果集返回給客戶端。

最后的排序就是下圖虛線框中的操作,如果 sort_buffer 設置的大小不夠大,那么就會使用臨時表來輔助排序。

優化

未優化(也就是分組列沒有索引)的 group by 的總過程可以概括為:因為數據是無序的,所以需要創建臨時表,然后一個一個判斷屬于哪個分組,最后再根據分組列進行排序。所以,優化可以有兩個思路:

去掉排序

在明確返回的數據不需要排序的情況下,可以禁止排序,也就是將上面的語句改成 select a,count(*) from t group by a order by null。

順序排列

如果記錄都按照排序字段排序,那么數據就變成了下面的結構:

這樣在實際獲取要返回的字段或計算聚合函數時,只需要按順序依次訪問,等到列值變成下一個就知道當前組訪問結束,將之前統計的數據直接返回。這樣就避免了創建臨時表,同時排序也不需要使用 sort_buffer 進行額外排序。這樣就極大地提高了執行的效率。

實現

1、如果分組字段適合創建索引就直接為分組字段創建索引。

MySQL 5.7 版本支持了 generated column 機制,用來實現列數據的關聯更新。你可以用下面的方法創建一個列 z,然后在 z 列上創建一個索引(如果是 MySQL 5.6 及之前的版本,你也可以創建普通列和索引,來解決這個問題)

alter table t1 add column z int generated always as(id % 100), add index(z);

然后解析:

這時沒有用到臨時表和額外排序,所以性能提升。

2、如果分組字段不適合(使用率很低),那么可以使用 SQL_BIG_RESULT 來嘗試優化。

在 group by 語句中加入 SQL_BIG_RESULT 這個提示(hint),就可以告訴優化器:這個語句涉及的數據量很大,請直接用磁盤臨時表。MySQL 的優化器一看,磁盤臨時表是 B+ 樹存儲,存儲效率不如數組來得高。所以,既然使用SQL_BIG_RESULT來說明數據量很大,那從磁盤空間考慮,還是直接用數組來存吧。所以在使用 SQL_BIG_RESULT 后優化器會使用數組結構的磁盤臨時表。

但是如果在未達到磁盤臨時表的使用條件是不會使用磁盤臨時表的,也就是在 sort_buffer 空間能夠存儲要返回和排序的總字段長度時,就使用數組結構的 sort_buffer ,如果總字段超過 sort_buffer 大小,那么就再加上數組結構的磁盤臨時表來幫助排序。

那么在 sort_buffer 空間足夠的情況下, sort_buffer 內部就會對數據進行排序,這樣也就起到了索引的作用,

還是以上面的例子來看,使用 SQL_BIG_RESULT

alter table t1 add column z int generated always as(id % 100), add index(z);

具體過程如下:

1、初始化 sort_buffer,確定放入一個整型字段,記為 m;
2、掃描表 t1 的索引 a,依次取出里面的 id 值, 將 id%10 的值存入 sort_buffer 中;
3、掃描完成后,對 sort_buffer 的字段 m 做排序(如果 sort_buffer 內存不夠用,就會利用磁盤臨時文件輔助排序);
4、排序完成后,就得到了一個有序數組。

解析:

可以看到此時就沒有使用臨時表了,而是直接使用 sort_buffer 進行排序,這樣就省去了使用臨時表帶來的性能消耗。

總結

1、如果對 group by 語句的結果沒有排序要求,要在語句后面加 order by null;那么一般情況就不需要使用臨時表了(上面兩個優化都是在要求排序的前提下提出的優化方式)
2、盡量讓 group by 過程用上表的索引,確認方法是 explain 結果里沒有 Using temporary 和 Using filesort;
3、如果 group by 需要統計的數據量不大,盡量只使用內存臨時表;也可以通過適當調大 tmp_table_size 參數,來避免用到磁盤臨時表;
4、如果數據量實在太大,使用 SQL_BIG_RESULT 這個提示,來告訴優化器直接使用排序算法得到 group by 的結果。

以上就是詳解MySQL Group by 優化的詳細內容,更多關于MySQL Group by 優化的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • MySQL group by語句如何優化
  • MySQL優化GROUP BY(松散索引掃描與緊湊索引掃描)
  • MySQL優化GROUP BY方案

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

巨人網絡通訊聲明:本文標題《MySQL Group by的優化詳解》,本文關鍵詞  MySQL,Group,的,優化,詳解,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL Group by的優化詳解》相關的同類信息!
  • 本頁收集關于MySQL Group by的優化詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品一二三区在线| 欧美日韩电影在线播放| 国产麻豆精品一区二区| 99久久精品国产一区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 在线看日本不卡| 亚洲综合久久久久| 欧美久久久久免费| 九九精品视频在线看| 久久精品一区蜜桃臀影院| 国产成人在线视频播放| 国产精品伦理一区二区| 99国产精品一区| 午夜影院在线观看欧美| 欧美精品一区二区蜜臀亚洲| 成人免费电影视频| 午夜成人免费视频| 久久亚洲精华国产精华液| 久久精品国产澳门| 国产婷婷精品av在线| 一本大道久久a久久精二百| 亚洲色图清纯唯美| 欧美日韩久久一区二区| 国内国产精品久久| 一区二区三区毛片| 欧美猛男男办公室激情| 国产精品自产自拍| 亚洲精品五月天| 精品美女在线播放| 日本国产一区二区| 国产不卡视频一区二区三区| 亚洲国产视频一区| 久久久久久电影| 欧洲精品在线观看| 成人黄页毛片网站| 精品一区二区三区在线视频| 亚洲伦理在线精品| 久久久久久黄色| 3751色影院一区二区三区| 国产成人超碰人人澡人人澡| 在线一区二区视频| 国模娜娜一区二区三区| 亚洲国产日韩a在线播放性色| 26uuu亚洲婷婷狠狠天堂| 欧美日韩五月天| 成人激情电影免费在线观看| 日日夜夜一区二区| 亚洲综合色视频| 久久久久久9999| 欧美电影免费提供在线观看| 一本大道久久a久久综合婷婷| 国产成人免费在线观看不卡| 极品尤物av久久免费看| 一区二区三区欧美激情| 亚洲欧洲精品一区二区三区不卡 | 精品国免费一区二区三区| 欧美日韩国产不卡| 国产精品麻豆视频| 国产亚洲精品7777| 日韩免费看的电影| 在线电影院国产精品| 欧洲精品一区二区| 色综合久久综合中文综合网| 国产精品国产三级国产有无不卡 | 日韩美一区二区三区| 欧美婷婷六月丁香综合色| 91久久奴性调教| 欧美综合在线视频| 日本久久一区二区| 色视频一区二区| 欧美性感一类影片在线播放| 欧美日韩一卡二卡| 欧美色图免费看| 欧美日韩高清在线播放| 欧美日本一区二区三区| 欧美日韩一区中文字幕| 4hu四虎永久在线影院成人| 欧美人牲a欧美精品| 91精品国产免费| 日韩久久免费av| 精品久久国产字幕高潮| 国产精品女人毛片| 日韩毛片视频在线看| 亚洲自拍偷拍麻豆| 麻豆精品一二三| 国产精品77777| 91蜜桃传媒精品久久久一区二区| 欧美性大战久久久| 欧美老女人在线| 久久久久久夜精品精品免费| 国产精品家庭影院| 日韩av一二三| 国产成人丝袜美腿| 日本韩国欧美在线| 精品日韩av一区二区| 欧美激情艳妇裸体舞| 亚洲精品久久久久久国产精华液| 亚洲成人久久影院| 国产999精品久久久久久| 欧洲精品一区二区| 久久蜜桃av一区二区天堂| 亚洲一区二区五区| 国产一区美女在线| 欧美日韩亚洲另类| 国产亚洲精品精华液| 日韩成人精品视频| 国产91对白在线观看九色| 欧美日本视频在线| 欧美国产乱子伦| 一区二区三区小说| 国产一区二区在线观看视频| 91女厕偷拍女厕偷拍高清| 91精品免费观看| 国产三级精品在线| 日韩福利视频导航| 91尤物视频在线观看| 久久午夜电影网| 亚洲自拍都市欧美小说| 岛国av在线一区| 日韩欧美亚洲国产精品字幕久久久| 亚洲欧洲一区二区三区| 国产成人精品亚洲777人妖 | 欧美专区日韩专区| 欧美高清在线精品一区| 日韩激情在线观看| 97久久精品人人做人人爽| 欧美大片拔萝卜| 日韩成人午夜电影| 欧美探花视频资源| ㊣最新国产の精品bt伙计久久| 久久国产福利国产秒拍| 欧美视频一区二区在线观看| 亚洲精品高清视频在线观看| 成人午夜伦理影院| 国产人成亚洲第一网站在线播放 | 亚洲精品视频在线看| av在线不卡网| 久久精品一区二区三区不卡| 国产一区二区在线影院| 精品久久久三级丝袜| 黄色小说综合网站| 日韩欧美一级精品久久| 久久er99精品| 精品国产一区二区亚洲人成毛片| 久久精品国产一区二区| 精品免费99久久| 国产日韩av一区| 成人一级片在线观看| 中文字幕在线不卡视频| 99久久精品国产观看| √…a在线天堂一区| 一本大道久久a久久综合| 亚洲精品成人悠悠色影视| 欧美综合天天夜夜久久| 亚洲va欧美va人人爽| 欧美一区二区三区的| 蜜桃精品视频在线观看| 日韩一区二区免费电影| 韩国精品在线观看| 亚洲精品在线观看视频| 成人h动漫精品一区二区| 亚洲乱码中文字幕| 欧美一区二区三区免费在线看| 麻豆国产精品视频| 中文字幕一区二区三区乱码在线 | 欧美日韩一区在线| 国内国产精品久久| 国产精品麻豆欧美日韩ww| 欧美日韩在线精品一区二区三区激情 | 在线国产亚洲欧美| 首页欧美精品中文字幕| 日韩免费视频一区二区| 国产综合成人久久大片91| 国产精品久久久久久久裸模| 欧美精品在线观看一区二区| 久久99精品久久久久久动态图 | 91久久免费观看| 日本中文字幕不卡| 国产夜色精品一区二区av| 色综合天天综合给合国产| 亚洲国产综合色| 久久久久国产精品麻豆 | 99精品欧美一区二区三区综合在线| 一区二区三区中文字幕| 欧美xxxx老人做受| 欧美亚洲国产一区二区三区| 蜜臀av性久久久久蜜臀av麻豆| 国产精品国产三级国产普通话99 | 久久成人久久爱| 亚洲精品综合在线| 久久免费看少妇高潮| 欧美裸体一区二区三区| 91麻豆视频网站| 国产精品77777| 精品一区二区在线看| 亚洲高清视频在线| 亚洲黄色av一区| 国产日韩精品一区二区三区| 日韩欧美一级在线播放| 色妞www精品视频|