国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

MySQL排序工作原理

數(shù)據(jù)庫 MySQL
在程序設(shè)計(jì)當(dāng)中,我們很多場(chǎng)景下都會(huì)用 group by 關(guān)鍵字。比如在分頁讀取數(shù)據(jù)時(shí),為了避免重復(fù)掃描記錄,這就是必須要使用 group by 了。

MySQL的 order by 工作原理

在程序設(shè)計(jì)當(dāng)中,我們很多場(chǎng)景下都會(huì)用 group by 關(guān)鍵字。比如在分頁讀取數(shù)據(jù)時(shí),為了避免重復(fù)掃描記錄,這就是必須要使用 group by 了。

比如我們使用如下 DDL 創(chuàng)建表:

  1. CREATE TABLE `user_info` ( 
  2.  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID'
  3.  `city` varchar(16) NOT NULL COMMENT '城市'
  4.  `namevarchar(16) NOT NULL COMMENT '姓名'
  5.  `age` int(11) NOT NULL COMMENT '年齡'
  6.  `addr` varchar(128) DEFAULT NULL COMMENT '地址'
  7.  PRIMARY KEY (`id`), 
  8.  KEY `city` (`city`) 
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 

并且我們會(huì)執(zhí)行如下查詢語句

  1. SELECT city,`name`,age FROM user_info WHERE city='上海' ORDER BY `name` LIMIT 1000; 

全字段排序

因?yàn)樯厦娴慕ū碚Z句已經(jīng)在 city 字段上面創(chuàng)建索引了,當(dāng)我們使用 EXPLAIN 命令時(shí),會(huì)有如下結(jié)果:

MySQL的 order by 工作原理

上面 Extra 字段中的 “Using filesort” 表示的就是需要排序,MySQL 會(huì)為每個(gè)線程分配一塊內(nèi)存用于排序,成為 sort_buffer。下面我們看一下 index(city) 的結(jié)構(gòu)示意圖。

MySQL的 order by 工作原理

執(zhí)行流程如下:

  1. 初始化 sort_buffer,確定放入 city name age 這 3 個(gè)字段;
  2. 從 city 索引中獲取到***個(gè) city='上海' 的記錄,也就是 id_x;
  3. 到主鍵索引中獲取對(duì)應(yīng)的記錄,并取出 name city age 的值放入 sort_buffer;
  4. 取下一條符合條件的記錄,重復(fù) 3 4 的操作,直至不符合條件為止;
  5. 對(duì) sort_buffer 中的數(shù)據(jù)按照 name 做快速排序;
  6. 取出前 1000 條數(shù)據(jù)并返回。

我們暫時(shí)叫這種排序過程為“全字段排序”,如下所示:

MySQL的 order by 工作原理

圖中的“按 name 排序” 可能在內(nèi)存中,也可能使用磁盤文件排序,這取決與排序所需要的內(nèi)存和 sort_buffer_size 。sort_buffer_size 就是 MySQL 為排序開辟的內(nèi)存大小,當(dāng)所需內(nèi)存小于 sort_buffer_size 時(shí),就直接在內(nèi)存中完成排序,如果所需要的內(nèi)存 大于 sort_buffer_size ,就需要額外的磁盤空間輔助排序。

rowid 排序

上面的算法在數(shù)據(jù)量比較大的時(shí)候,可能會(huì)出現(xiàn)一些問題。因?yàn)樵谂判虻臅r(shí)候,存放了所有的返回字段,增加了 排序空間 (sort_buffer)的壓力。

  1. SET max_length_for_sort_data=16; 

max_length_for_sort_data 是MySQL 限制排序行大小的參數(shù)。意思是,如果排序行大小超過了這個(gè)值,就會(huì)另選排序算法。上面 name city age 3 個(gè)字段的大小為 36,大于 16 ,在新的算法中將只有 name (排序字段) 和id 參與 sort_buffer 中的排序。過程如下

  1. 初始化 sort_buffer,確定放入 name id 這 2 個(gè)字段;
  2. 從 city 索引中獲取到***個(gè) city='上海' 的記錄,也就是 id_x;
  3. 到主鍵索引中獲取對(duì)應(yīng)的記錄,并取出 name id 的值放入 sort_buffer;
  4. 取下一條符合條件的記錄,重復(fù) 3 4 的操作,直至不符合條件為止;
  5. 對(duì) sort_buffer 中的數(shù)據(jù)按照 name 做快速排序;
  6. 取出前 1000 條數(shù)據(jù),然后根據(jù) id 取出對(duì)應(yīng)記錄的 name city age 3 個(gè)字段并返回結(jié)果。

這種排序過程,我們稱為 rowid 排序,過程如下所示:

MySQL的 order by 工作原理

全字段排序 VS rowid 排序

從上面 2 個(gè)流程看來,如果內(nèi)存足夠時(shí),MySQL 會(huì)讓返回值中所有字段存放在排序空間。當(dāng)MySQL 內(nèi)存過小時(shí),才會(huì)考慮使用rowid 排序。但是從上面的流程看來,rowid 排序在返回結(jié)果前,還會(huì)再一次的回表。因此MySQL 認(rèn)為內(nèi)存充足的時(shí)候,會(huì)優(yōu)先采用 全字段排序。

上面的場(chǎng)景是:city 字段過濾后,name 字段不是有序的。其實(shí)我們可以通過聯(lián)合索引來規(guī)避掉 name 字段的排序。

  1. alter table user_info add index idx_city_user(city, name); 

下面我們看一下聯(lián)合索引的示意圖:

MySQL的 order by 工作原理

從上面流程圖可以看出,當(dāng)我們?nèi)〕?city='上海' 的記錄時(shí),name的字段也是有序的。過程如下

  1. 從 (city, name)索引中獲取到***個(gè) city='上海' 的記錄 id_x;
  2. 到主鍵索引中獲取對(duì)應(yīng)的記錄,并取出 name city age 的值作為結(jié)果集的一部分直接返回;
  3. 取下一條符合條件的記錄,重復(fù) 2 3 的操作,直至不符合條件或者達(dá)到 1000 條為止;

MySQL的 order by 工作原理

從聯(lián)合索引看來,我們是可以不用排序操作了,那么我們是否可以直接通過 索引就直接返回結(jié)果呢?也就是不要回表操作。答案是有的,那就是覆蓋索引。

  1. alter table user_info add index idx_city_user_age(city, name, age); 

當(dāng)執(zhí)行查詢語句時(shí),不僅 name 中的字段是有序的,并且 索引中已經(jīng)包含了結(jié)果集中的所有字段,過程如下:

  1. 從 (city, name,age)索引中獲取到***個(gè) city='上海' 的記錄,并取出 name city age 的值作為結(jié)果集的一部分直接返回;
  2. 取下一條符合條件的記錄,重復(fù) 1 2 的操作,直至不符合條件或者達(dá)到 1000 條為止;

MySQL的 order by 工作原理

 

責(zé)任編輯:龐桂玉 來源: 今天頭條
相關(guān)推薦

2010-11-25 10:28:28

MySQL查詢優(yōu)化器

2009-06-18 13:31:03

Spring工作原理

2009-08-14 13:19:23

2019-04-29 11:14:25

MySQL存儲(chǔ)排序

2020-06-15 07:00:00

GitOpsKubernetesDevOps

2009-06-15 15:57:21

Spring工作原理

2009-07-16 10:23:30

iBATIS工作原理

2021-02-05 15:01:41

GitLinux命令

2010-09-25 13:11:48

DHCP工作原理

2010-08-02 16:14:54

2013-09-18 14:01:46

JavaScript

2010-09-29 09:28:04

DHCP工作原理

2020-09-16 10:31:58

SMTP網(wǎng)絡(luò)電子郵件

2019-08-20 14:01:22

HTTPSSSL協(xié)議

2013-06-04 13:53:30

OSPF路由協(xié)議OSPF協(xié)議OSPF

2011-03-25 09:34:34

Nagios網(wǎng)絡(luò)監(jiān)控

2009-07-06 12:32:26

JSP引擎

2015-11-04 09:23:17

JavaServlet工作原理

2010-02-04 10:43:05

Android DDM

2009-08-27 17:13:20

DHCP的工作原理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

午夜精品亚洲一区二区三区嫩草 | 国语对白在线刺激| 26uuu亚洲| 国产精品一区二区免费| av资源久久| 51色欧美片视频在线观看| 日日夜夜综合| 一本色道久久88综合日韩精品| 天堂av中文在线| 欧美午夜片在线看| 成人p站proumb入口| 日韩欧美在线免费| 户外极限露出调教在线视频| 色88888久久久久久影院野外| 最近中文字幕mv免费高清在线| 亚洲欧美日韩中文播放 | 欧美精品午夜| 九九热最新视频//这里只有精品| 筱崎爱全乳无删减在线观看| 日韩精品一区二区在线观看| 性欧美1819sex性高清大胸| 日韩一区二区在线观看视频播放| 免费在线看黄网站| 精品毛片乱码1区2区3区| 国产精品蜜臀| 日韩精品在线电影| 国精品产品一区| 欧美日本在线视频中文字字幕| 欧美高清一级片| 国产99久久精品一区二区 夜夜躁日日躁| 精品视频亚洲| 成人欧美一区二区三区在线观看| 亚洲美女啪啪| 一本久道久久综合| 91网站在线播放| 成年网站免费| 日本高清免费不卡视频| 手机在线免费av| 最近中文字幕2019免费| 国产精品nxnn| 成人黄色大片在线免费观看| 国产视频亚洲| 黄网站色视频免费观看| 青青草99啪国产免费| 成人影院网站ww555久久精品| 欧美成人黄色小视频| 亚洲小说春色综合另类电影| 国产精品91在线观看| 欧美福利专区| 国产成人免费高清视频| 欧美高清在线精品一区| 美州a亚洲一视本频v色道| 欧美主播一区二区三区| 欧美www.| 国产精品偷伦免费视频观看的| 天天干天天玩天天操| 亚洲人吸女人奶水| 91免费在线| 中文字幕一区二区三区电影| 国产精品探花在线观看| 九色91在线视频| 99久久精品免费| 日韩电影网址| 一区二区福利视频| 欧美hd在线| 永久免费看av| 天天影视涩香欲综合网| 丝袜美腿一区| 国产拍精品一二三| 国产一区不卡在线| 国产在线制服美女| 日韩av中文字幕在线免费观看| 九九热播视频在线精品6 | 美女网站色精品尤物极品姐弟| 国产精品成人观看视频免费| 成人av网站大全| 最近高清中文在线字幕在线观看| 日韩在线视频免费观看| 欧美国产小视频| 国产精品免费看久久久无码| 亚洲制服欧美中文字幕中文字幕| 午夜激情电影在线播放| 国产成人精品日本亚洲| 青草国产精品久久久久久| 午夜神马福利影院| 亚洲最新av在线| 黄色成人av网站| 日日干夜夜操s8| 精品88久久久久88久久久| 国产一区二区精品久| 六月婷婷激情综合| 色国产综合视频| 91麻豆精品激情在线观看最新 | 日韩精品一区二区三区色欲av| 欧美日韩在线播放| 色综合www| 久久黄色片视频| 精品少妇一区二区三区视频免付费 | 日韩综合小视频| 天天操夜夜干| 久久国产精品影片| 久久99精品久久只有精品| av二区三区| 久久五月天综合| 国产精品99久久久久久久vr | 狠狠久久综合婷婷不卡| 亚洲精品成人a在线观看| 成人免费视频观看| 日本一区二区精品视频| 色女孩综合影院| 精品视频亚洲| 成人免费淫片在线费观看| www.日韩系列| 国产精品亚洲第一| 四虎亚洲成人| 热re99久久精品国产99热| 欧美性猛xxx| 久久精品青草| 在线观看国产v片| 国产精品91久久| 亚洲欧美日韩国产手机在线| 在线日韩成人| 日本女优爱爱视频| 欧美xxxx14xxxxx性爽| 91一区二区在线| 爱情电影网av一区二区| 18岁网站在线观看| 久久天天躁狠狠躁夜夜av| 97精品久久久午夜一区二区三区 | 亚洲黄色天堂| 啊v视频在线| 国产一区免费| 欧美三区在线观看| 国产亚洲一区在线| 亚洲羞羞网站| 91免费网站视频| 色妞久久福利网| 久久久国产精华| 色狠狠久久av综合| 国内精品卡一卡二卡三新区| 成人免费在线视频网址| 91福利在线播放| 日韩午夜在线| av电影免费在线看| 欧日韩免费视频| 欧美高清不卡在线| 亚洲欧美国产77777| 婷婷久久国产对白刺激五月99| 理论视频在线| 欧美日韩亚洲一区二区三区四区| 精品国产91九色蝌蚪| 国内一区二区视频| 国产色99精品9i| 成视频年人免费看黄网站| 成人欧美一区二区三区黑人| 欧美剧情片在线观看| 久久99精品久久久久| 精品一区二区三区亚洲| 中国国产一级毛片| 精品婷婷色一区二区三区蜜桃| 亚洲激情在线观看| 久久久久国产成人精品亚洲午夜| 欧美日韩国产一区二区三区不卡| 亚洲成人基地| 久久资源av| 亚洲午夜未删减在线观看 | 欧美电影在线观看免费| 在线观看黄色片| 亚洲 国产 欧美一区| 久久精品青青大伊人av| 亚洲成人动漫在线观看| 日韩国产欧美一区二区三区| 午夜日韩影院| 在线观看免费版| 男人的天堂狠狠干| 成人两性免费视频| 国产亚洲综合久久| 亚洲a一区二区| 激情丁香综合五月| 蜜桃视频欧美| 国模私拍视频在线播放| 日韩一区二区三区不卡视频| 国产精品免费看一区二区三区| 在线日韩av观看| 欧美性猛交xxxx免费看漫画| 青娱乐精品视频| 任我爽精品视频在线播放| www.久久ai| 激情综合网五月激情 | 天堂精品一区二区三区| 久久久久久尹人网香蕉| 6080亚洲精品一区二区| 91年精品国产| 黄色成人在线网址| 一区中文字幕电影| av毛片在线免费| jizzjizz亚洲中国少妇| 国产精品999视频| 精品日韩美女| 国产成人精品免高潮费视频|