成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > MySQL group by語句如何優(yōu)化

MySQL group by語句如何優(yōu)化

熱門標(biāo)簽:日照旅游地圖標(biāo)注 廣東人工電話機(jī)器人 信陽穩(wěn)定外呼系統(tǒng)運(yùn)營商 南通自動(dòng)外呼系統(tǒng)軟件 湖南人工外呼系統(tǒng)多少錢 石家莊電商外呼系統(tǒng) 申請(qǐng)外呼電話線路 百度地圖圖標(biāo)標(biāo)注中心 芒果電話機(jī)器人自動(dòng)化

   在MySQL中,新建立一張表,該表有三個(gè)字段,分別是id,a,b,插入1000條每個(gè)字段都相等的記錄,如下:

mysql> show create table t1\G
*************************** 1. row ***************************
    Table: t1
Create Table: CREATE TABLE `t1` (
 `id` int(11) NOT NULL,
 `a` int(11) DEFAULT NULL,
 `b` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `a` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> select * from t1 limit 10;
+----+------+------+
| id | a  | b  |
+----+------+------+
| 1 |  1 |  1 |
| 2 |  2 |  2 |
| 3 |  3 |  3 |
| 4 |  4 |  4 |
| 5 |  5 |  5 |
| 6 |  6 |  6 |
| 7 |  7 |  7 |
| 8 |  8 |  8 |
| 9 |  9 |  9 |
| 10 |  10 |  10 |
+----+------+------+
10 rows in set (0.00 sec)

   當(dāng)我們執(zhí)行下面包含group by的SQL時(shí),查看執(zhí)行計(jì)劃,可以看到:

mysql> explain select id%10 as m, count(*) as c from t1 group by m limit 10;
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+----------------------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra                    |
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+----------------------------------------------+
| 1 | SIMPLE   | t1  | NULL    | index | PRIMARY,a   | a  | 5    | NULL | 1000 |  100.00 | Using index; Using temporary; Using filesort |
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+----------------------------------------------+
1 row in set, 1 warning (0.00 sec)

最后面有:

  • using index:覆蓋索引
  • using temporary:使用了內(nèi)存臨時(shí)表
  • using filesort:使用了排序操作

   為了更好的理解這個(gè)group by語句的執(zhí)行過程,我畫一個(gè)圖來表示:

對(duì)照上面這個(gè)表,我們不難發(fā)現(xiàn),這個(gè)group by的語句執(zhí)行流程是下面這樣的:

a、首先創(chuàng)建內(nèi)存臨時(shí)表,內(nèi)存表里有兩個(gè)字段m和c,主鍵是m;m是id%10,而c是統(tǒng)計(jì)的count(*) 個(gè)數(shù)

b、掃描表t1的索引a,依次取出葉子節(jié)點(diǎn)上的id值,計(jì)算id%10的結(jié)果,記為x;此時(shí)如果臨時(shí)表中沒有主鍵為x的行,就插入一個(gè)記錄(x,1);如果表中有主鍵為x的行,就將x這一行的c值加1;

c、遍歷完成后,再根據(jù)字段m做排序,得到結(jié)果集返回給客戶端。(注意,這個(gè)排序的動(dòng)作是group by自動(dòng)添加的。)

 如果我們不想讓group by語句幫我們自動(dòng)排序,可以添加上order by null在語句的末尾,這樣就可以去掉order by之后的排序過程了。如下:

mysql> explain select id%10 as m, count(*) as c from t1 group by m order by null;
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra            |
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+------------------------------+
| 1 | SIMPLE   | t1  | NULL    | index | PRIMARY,a   | a  | 5    | NULL | 1000 |  100.00 | Using index; Using temporary |
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+------------------------------+
1 row in set, 1 warning (0.00 sec)

   可以看到,explain最后面的using filesort字樣已經(jīng)不見了。再來看下結(jié)果:

mysql> select id%10 as m, count(*) as c from t1 group by m;
+------+-----+
| m  | c  |
+------+-----+
|  0 | 100 |
|  1 | 100 |
|  2 | 100 |
|  3 | 100 |
|  4 | 100 |
|  5 | 100 |
|  6 | 100 |
|  7 | 100 |
|  8 | 100 |
|  9 | 100 |
+------+-----+
10 rows in set (0.00 sec)
mysql> select id%10 as m, count(*) as c from t1 group by m order by null;
+------+-----+
| m  | c  |
+------+-----+
|  1 | 100 |
|  2 | 100 |
|  3 | 100 |
|  4 | 100 |
|  5 | 100 |
|  6 | 100 |
|  7 | 100 |
|  8 | 100 |
|  9 | 100 |
|  0 | 100 |
+------+-----+
10 rows in set (0.00 sec)

   當(dāng)我們不加order by null的時(shí)候,group by會(huì)自動(dòng)為我們進(jìn)行排序,所以m=0的記錄會(huì)在第一條的位置,如果我們加上order by null,那么group by就不會(huì)自動(dòng)排序,那么m=0的記錄就在最后面了。

   我們當(dāng)前這個(gè)語句,表t1中一共有1000條記錄,對(duì)10取余,只有10個(gè)結(jié)果,在內(nèi)存臨時(shí)表中還可以放下,內(nèi)存臨時(shí)表在MySQL中,通過tmp_table_size來控制。

mysql> show variables like "%tmp_table%";
+----------------+----------+
| Variable_name | Value  |
+----------------+----------+
| max_tmp_tables | 32    |
| tmp_table_size | 39845888 |
+----------------+----------+
2 rows in set, 1 warning (0.00 sec)

   當(dāng)我們的結(jié)果足夠大,而內(nèi)存臨時(shí)表不足以保存的時(shí)候,MySQL就會(huì)使用磁盤臨時(shí)表,整個(gè)訪問的速度就變得很慢了。那么針對(duì)group by操作,我們?nèi)绾蝺?yōu)化?

01

group by優(yōu)化之索引

   從上面的描述中不難看出,group by進(jìn)行分組的時(shí)候,創(chuàng)建的臨時(shí)表都是帶一個(gè)唯一索引的。如果數(shù)據(jù)量很大,group by的執(zhí)行速度就會(huì)很慢,要想優(yōu)化這種情況,還得分析為什么group by 需要臨時(shí)表?

   這個(gè)問題其實(shí)是因?yàn)間roup by的邏輯是統(tǒng)計(jì)不同的值出現(xiàn)的次數(shù),由于每一行記錄做group by之后的結(jié)果都是無序的,所以就需要一個(gè)臨時(shí)表存儲(chǔ)這些中間結(jié)果集。如果我們的所有值都是排列好的,有序的,那情況會(huì)怎樣呢?

例如,我們有個(gè)表的記錄id列是:

0,0,0,1,1,2,2,2,2,3,4,4,

當(dāng)我們使用group by的時(shí)候,就直接從左到右,累計(jì)相同的值即可。這樣就不需要臨時(shí)表了。

   上面的結(jié)構(gòu)我們也不陌生,當(dāng)我們以在某個(gè)數(shù)據(jù)列上創(chuàng)建索引的時(shí)候,這個(gè)列本身就是排序的,當(dāng)group by是以這個(gè)列為條件的時(shí)候,那么這個(gè)過程就不需要排序,因?yàn)樗饕亲匀慌判虻?。為了?shí)現(xiàn)這個(gè)優(yōu)化,我們給表t1新增一個(gè)列z,如下:

mysql> alter table t1 add column z int generated always as(id % 10), add index(z);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> select z as m, count(*) as c from t1 group by z;
+------+-----+
| m  | c  |
+------+-----+
|  0 | 100 |
|  1 | 100 |
|  2 | 100 |
|  3 | 100 |
|  4 | 100 |
|  5 | 100 |
|  6 | 100 |
|  7 | 100 |
|  8 | 100 |
|  9 | 100 |
+------+-----+
10 rows in set (0.00 sec)

mysql> explain select z as m, count(*) as c from t1 group by z;
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra    |
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE   | t1  | NULL    | index | z       | z  | 5    | NULL | 1000 |  100.00 | Using index |
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

   我們新增字段z,z的值是id%10之后的值,并且創(chuàng)建索引,再通過group by對(duì)這個(gè)z列進(jìn)行分組,可以看到,結(jié)果中已經(jīng)沒有臨時(shí)表了。

   所以,使用索引可以幫助我們?nèi)サ鬵roup by依賴的臨時(shí)表

02

group by優(yōu)化---直接排序

   如果我們已經(jīng)知道表的數(shù)據(jù)量特別大,內(nèi)存臨時(shí)表肯定不足以容納排序的時(shí)候,其實(shí)我們可以通過告知group by進(jìn)行磁盤排序,而直接跳過內(nèi)存臨時(shí)表的排序過程。

  其實(shí)在MySQL中是有這樣的方法的:在group by語句中加入SQL_BIG_RESULT這個(gè)提示(hint),就可以告訴優(yōu)化器:這個(gè)語句涉及的數(shù)據(jù)量很大,請(qǐng)直接用磁盤臨時(shí)表。當(dāng)我們使用這個(gè)語句的時(shí)候,MySQL將自動(dòng)利用數(shù)組的方法來組織磁盤臨時(shí)表中的字段,而不是我們所周知的B+樹。關(guān)于這個(gè)知識(shí)點(diǎn),這里給出官方文檔的介紹:

SQL_BIG_RESULT or SQL_SMALL_RESULT can be used with GROUP BY or DISTINCT to tell the optimizer that the result set has many rows or is small, respectively. For SQL_BIG_RESULT, MySQL directly uses disk-based temporary tables if they are created, and prefers sorting to using a temporary table with a key on the GROUP BY elements. For SQL_SMALL_RESULT, MySQL uses in-memory temporary tables to store the resulting table instead of using sorting. This should not normally be needed.

   整個(gè)group by的處理過程將會(huì)變成:

a、初始化sort_buffer,確定放入一個(gè)整型字段,記為m;

b、掃描表t1的索引a,依次取出里面的id值, 將 id%100的值存入sort_buffer中;

c、掃描完成后,對(duì)sort_buffer的字段m做排序(如果sort_buffer內(nèi)存不夠用,就會(huì)利用磁盤臨時(shí)文件輔助排序);

d、排序完成后,就得到了一個(gè)有序數(shù)組。類似0,0,0,1,1,2,2,3,3,3,4,4,4,4這樣

e、根據(jù)有序數(shù)組,得到數(shù)組里面的不同值,以及每個(gè)值的出現(xiàn)次數(shù)。

昨天的文章中我們分析了union 語句會(huì)使用臨時(shí)表,今天的內(nèi)容我們分析了group by語句使用臨時(shí)表的情況,那么MySQL究竟什么時(shí)候會(huì)使用臨時(shí)表呢?

MySQL什么時(shí)候會(huì)使用內(nèi)部臨時(shí)表?

1、如果語句執(zhí)行過程可以一邊讀數(shù)據(jù),一邊直接得到結(jié)果,是不需要額外內(nèi)存的,否則就需要額外的內(nèi)存,來保存中間結(jié)果;

2、如果執(zhí)行邏輯需要用到二維表特性,就會(huì)優(yōu)先考慮使用臨時(shí)表。比如union需要用到唯一索引約束, group by還需要用到另外一個(gè)字段來存累積計(jì)數(shù)。

以上就是MySQL group by語句如何優(yōu)化的詳細(xì)內(nèi)容,更多關(guān)于MySQL group by優(yōu)化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • MySQL優(yōu)化GROUP BY(松散索引掃描與緊湊索引掃描)
  • MySQL優(yōu)化GROUP BY方案
  • MySQL Group by的優(yōu)化詳解

標(biāo)簽:阿里 惠州 公主嶺 天津 呼和浩特 牡丹江 合肥 沈陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL group by語句如何優(yōu)化》,本文關(guān)鍵詞  MySQL,group,語句,如何,優(yōu)化,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL group by語句如何優(yōu)化》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL group by語句如何優(yōu)化的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产精品免费观看在线| 涩涩日韩在线| 久久综合久久美利坚合众国| 国产三级伦理在线| 东方aⅴ免费观看久久av| 久久亚洲资源中文字| 久久的色偷偷| 成年人视频免费在线观看| 久久久久久亚洲综合影院红桃| 人妻丰满熟妇av无码区app| 日韩在线一区二区三区| av动漫在线播放| 中文字幕乱码一区二区三区| 国产一区二区在线| 一区二区三区成人精品| 在线视频日韩精品| 丰满人妻一区二区三区免费| 最新中文字幕在线观看| 午夜精品久久久久久久99热浪潮| 欧美久久一二区| 91社在线播放| 亚洲欧洲中文日韩久久av乱码| 色屁屁影院www国产高清麻豆| 黑人精品一区| 色婷婷精品大视频在线蜜桃视频| 999精品在线观看| 久久人妻少妇嫩草av蜜桃| 亚洲男女网站| 久久男人av| 黄色av成人| 免费在线不卡av| 成人一区二区三区中文字幕| 五月婷婷久久久| 欧美性video| 性感av在线播放| 在线免费看av不卡| 无码人妻精品一区二区三区蜜桃91| 黑人一区二区| 公交车强行挺进岳身体| 91aaa在线观看| 欧美精品在线视频观看| 欧美日韩在线一区二区三区| 欧美视频精品全部免费观看| 国产一区深夜福利| 牛夜精品久久久久久久99黑人| 欧美日韩在线视频免费观看| 99久久国产宗和精品1上映| 3dmax动漫人物在线看| 欧美人与牛zoz0性行为| 国产91精品高潮白浆喷水| 亚洲国产福利| 美女扒开尿口让男人操| 日韩欧美一区二区不卡| 成人污污视频在线观看| 国产婷婷成人久久av免费高清| 国产视频精选在线| www.夜色| 欧美疯狂做受xxxx富婆| 91精品91久久久中77777老牛| 国产视频一区欧美| 菁菁伊人国产精品| 九色自拍麻豆| 国产精品视频第一区| 青草影视电视剧免费播放在线观看| 天天插天天干天天操| 亚洲午夜av电影| 欧美色综合久久| 日日夜夜精品视频| 日本欧美一区二区在线观看| 日日摸夜夜添夜夜添亚洲女人| 久久精品国产成人一区二区三区| 中文字幕1区2区3区| 无码人妻精品一区二区蜜桃色欲| 免费看av大片| 欧美性xxxxx极品娇小| 日本一区二区在线免费播放| 极品白嫩少妇无套内谢| 四虎国产成人精品免费一女五男| 国产一级二级三级在线观看| 国产精品久久久久久久久久久不卡| av一本久道久久波多野结衣| 日韩欧美国产一区二区三区| 精品久久成人| 美女100%露胸无遮挡| 成人免费看片'免费看| 欧美精品91| 欧美暴力调教| 国产亚洲人成a一在线v站| 六月婷婷综合网| 欧美在线免费一级片| 无码成人精品区在线观看| 天天色综合天天| 欧美1级2级| 蜜臀av在线观看| h片在线免费观看| 欧美极品videos大乳护士| 午夜欧美一区二区三区免费观看| 中文字幕2区| 黄色在线免费| 影音先锋在线国产| 亚洲高清视频一区| 色婷婷精品国产一区二区三区| 国产青草视频在线观看视频| 亚洲不卡1区| 波多野结衣一二三四区| 国产在线1区| 久久这里只有精品99| 久久人人爽人人爽人人片av免费| 中文字幕在线观看免费| 国产娇喘精品一区二区三区图片| 伊人久久久久久久久久| 日韩欧美精品在线不卡| 黄色成人av网站| 一区二区免费不卡在线| 96sao精品视频在线观看| 欧美色欧美亚洲另类| 永久免费av无码网站性色av| 欧美人狂配大交3d怪物一区| 亚洲系列中文字幕| 性一交一乱一伦一色一情| 成人丝袜视频网| 国产性猛交╳xxx乱大交| 天堂一区二区在线| 久久青青色综合| 亚洲一区二区三区午夜| 图片区小说区区亚洲影院| 成人黄色网免费| 26uuu精品一区二区在线观看| 国产一区二区不卡视频在线观看| 在线免费观看黄色| 91国产精品一区| 欧美成人一区二免费视频软件| 午夜伦理福利在线| 丝袜美腿高跟呻吟高潮一区| 高清毛片在线看| 性久久久久久久久久久久| 亚洲在线免费观看视频| 欧美日本一道| 午夜欧美一区二区三区在线播放| 成人在线免费看黄| 99视频在线观看视频| 欧洲在线视频一区| 美女扒开内裤让男人桶| 黄网在线观看视频| 久久久久88色偷偷| 久久精品人人做人人爽电影蜜月| gogogo免费视频观看亚洲一| 欧美大奶一区二区| 一区二区三区蜜桃网| 粉嫩粉嫩芽的虎白女18在线视频| 欧美一级特黄aaaaaa大片在线观看| 国产精品福利网| 国产嫩草在线观看| 综合久久av| 国产精品免费一区| 国产精品一区二区欧美黑人喷潮水| 精品深夜av无码一区二区老年| 久久综合久中文字幕青草| 中文字幕一区二区久久人妻网站| 国产 日韩 欧美在线| 日韩精品一卡二卡| 久久国产精品久久精品| 欧美在线视频免费播放| 亚洲一区二区三区成人在线视频精品| 国产视频一区二区三区四区| 黄色工厂在线观看| 污视频在线播放| 青青草超碰在线| 国产精品麻豆久久| 国产一区二区三区成人欧美日韩在线观看| 欧美日韩一区二区三区视频播放| 久久亚洲私人国产精品va媚药| 亚洲av综合一区| 欧美国产精品人人做人人爱| 国产精品国产一区| 日本高清中文字幕二区在线| 欧美顶级毛片在线播放| 亚洲欧洲精品一区二区三区不卡| 女子免费在线观看视频www| 国产区一区二区三区| 亚洲精品高清无码视频| 日韩人妻一区二区三区| 天天躁日日躁狠狠躁av麻豆男男| 自拍偷拍视频在线| 一本精品一区二区三区| 欧美亚洲色图视频| 欧美一区二区三区播放| 1024欧美极品| 欧美老少做受xxxx高潮| 91在线免费视频观看| 麻豆传媒在线免费看| 九色精品视频在线观看| 久久精品国产成人| 久久久男人天堂| 欧美videos另类| 亚洲黄色免费看| 欧美二区视频| 成人免费一区二区三区牛牛| 欧洲精品视频在线观看| 色版视频在线观看| 精品国产依人香蕉在线精品| 亚洲国产第一页| www.黄在线观看| 亚洲同志网站入口| **女人18毛片一区二区| 欧美日韩在线观看首页| 亚洲色图欧洲色图婷婷| 国内国产精品天干天干| 黄色网免费看| 亚洲精品日韩综合观看成人91| 欧美一级视频免费看| 亚洲成人综合在线| 精品人妻少妇嫩草av无码| 亚洲伊人影院| 日本少妇xxxx| h网站视频在线观看| 美女视频黄是免费| 国产一二三四区在线| 五福影院新址进入www1378| 亚洲成人a**址| 亚洲激情 欧美| 一区二区三区日本久久久| 日日摸夜夜爽人人添av| 国产三级三级在线观看| 日韩精品一区二区三区视频在线观看| 亚洲美女屁股眼交3| 欧美另类综合| 亚洲国产精品嫩草影院久久| h在线视频免费观看完整版| www.日本在线视频| 91麻豆精品成人一区二区| 亚洲ww精品| 美女av一区二区三区| 国产精品久久久久久久久久久久久久久久久| 性娇小13――14欧美| 26uuu国产日韩综合| 国产精品任我爽爆在线播放| 精品一区av| a毛片在线看免费观看| 成年人视频在线观看免费| 快播日韩欧美| 成人激情黄色小说| 美日韩在线视频| 欧美精品三级在线| 久久999免费视频| 成人免费高清在线| 欧美 日韩 国产一区| 国产精品jizz在线观看麻豆| 亚洲黄色在线观看| 国产亚洲精品久| 在线日韩国产精品| 久久久久久国产精品一区| 国产美女精品人人做人人爽| 一区二区中文视频| 成人高清av| 四虎成人精品在永久免费| 国产二区视频在线播放| 玩弄japan白嫩少妇hd| 亚洲久久一区二区| 日本午夜一本久久久综合| 亚洲第一视频区| 国产日韩欧美黄色| 婷婷综合久久中文字幕蜜桃三电影| 欧美6699在线视频免费| 欧洲国产精品| 亚洲自拍偷拍色图| 熟女熟妇伦久久影院毛片一区二区| 2020国产精品极品色在线观看| 91美女在线| 一区二区免费在线观看| 亚洲日本成人网| 亚欧黄色av| 亚洲成av人片在线观看无码| 大白屁股一区二区视频| 红杏一区二区三区| 一级特黄特色的免费大片| 激情中文字幕| 日韩av综合网站| 6080日韩午夜伦伦午夜伦| 国产精品成人品| 欧美日韩国产第一页| 精品国产日本| www中文字幕在线观看| 在线视频观看一区二区| 亚洲性猛交富婆| 麻豆精品一区二区综合av| 国产激情偷乱视频一区二区三区| 日韩电影中文 亚洲精品乱码| 北条麻妃一二三区| 午夜午夜精品一区二区三区文| 日本在线成人一区二区| 精品不卡一区二区| 欧美国产日韩免费| 色涩成人影视在线播放| 日本超碰一区二区| 久久一区国产| 国产超碰在线| 91最新在线视频| 欧美va亚洲va| 日韩在线视频线视频免费网站| 国产精品美女一区二区在线观看| 中日韩高清电影网| 黄色动漫在线免费观看| 日韩女优电影在线观看| www.99.热| 国产亚洲精品激情久久| 亚洲911精品成人18网站| 国产精品热久久久久夜色精品三区| 中文字幕在线网| 日韩精品久久久久久| 永久免费在线看片视频| 亚洲专区在线| 欧美视频网站| 国产激情久久久| 亚洲系列第一页| 国产精品s色| 亚洲黄页一区| 亚洲国产精品v| 国产成人精品自拍| 自拍电影在线观看| 免费网站你懂的| 人妖欧美一区二区| 97最新国自产拍视频在线完整在线看| 日本欧美电影在线观看| 强开小嫩苞一区二区三区网站| 亚洲欧美激情视频在线观看一区二区三区| 日本黄大片一区二区三区| 日本中文字幕在线视频|