校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識(shí)庫 > MySQL DISTINCT 的基本實(shí)現(xiàn)原理詳解

MySQL DISTINCT 的基本實(shí)現(xiàn)原理詳解

熱門標(biāo)簽:中國地圖標(biāo)注公司 自己做地圖標(biāo)注需要些什么 百度地圖標(biāo)注要什么軟件 福建外呼電銷機(jī)器人加盟 徐涇鎮(zhèn)騰訊地圖標(biāo)注 電話機(jī)器人的價(jià)格多少錢一個(gè)月 昌德訊外呼系統(tǒng) 天津公司外呼系統(tǒng)軟件 400電話申請(qǐng)廠家現(xiàn)貨

前言

DISTINCT 實(shí)際上和 GROUP BY 操作的實(shí)現(xiàn)非常相似,只不過是在 GROUP BY 之后的每組中只取出一條記錄而已。所以,DISTINCT 的實(shí)現(xiàn)和 GROUP BY 的實(shí)現(xiàn)也基本差不多,沒有太大的區(qū)別。同樣可以通過松散索引掃描或者是緊湊索引掃描來實(shí)現(xiàn),當(dāng)然,在無法僅僅使用索引即能完成 DISTINCT 的時(shí)候,MySQL 只能通過臨時(shí)表來完成。

但是,和 GROUP BY 有一點(diǎn)差別的是,DISTINCT 并不需要進(jìn)行排序。也就是說,在僅僅只是 DISTINCT 操作的 Query 如果無法僅僅利用索引完成操作的時(shí)候,MySQL 會(huì)利用臨時(shí)表來做一次數(shù)據(jù)的“緩存”,但是不會(huì)對(duì)臨時(shí)表中的數(shù)據(jù)進(jìn)行 filesort 操作。

當(dāng)然,如果我們?cè)谶M(jìn)行 DISTINCT 的時(shí)候還使用了 GROUP BY 并進(jìn)行了分組,并使用了類似于 MAX 之類的聚合函數(shù)操作,就無法避免 filesort 了。

下面我們就通過幾個(gè)簡單的 Query 示例來展示一下 DISTINCT 的實(shí)現(xiàn)。

1.首先看看通過松散索引掃描完成 DISTINCT 的操作:

sky@localhost : example 11:03:41> EXPLAIN SELECT DISTINCT group_id 
  -> FROM group_messageG
*************************** 1. row ***************************
      id: 1
 SELECT_type: SIMPLE
    table: group_message
     type: range
possible_keys: NULL
     key: idx_gid_uid_gc
   key_len: 4
     ref: NULL
     rows: 10
    Extra: Using index for group-by
1 row in set (0.00 sec)

我們可以很清晰的看到,執(zhí)行計(jì)劃中的 Extra 信息為“Using index for group-by”,這代表什么意思?為什么我沒有進(jìn)行 GROUP BY 操作的時(shí)候,執(zhí)行計(jì)劃中會(huì)告訴我這里通過索引進(jìn)行了 GROUP BY 呢?

其實(shí)這就是于 DISTINCT 的實(shí)現(xiàn)原理相關(guān)的,在實(shí)現(xiàn) DISTINCT的過程中,同樣也是需要分組的,然后再從每組數(shù)據(jù)中取出一條返回給客戶端。而這里的 Extra 信息就告訴我們,MySQL 利用松散索引掃描就完成了整個(gè)操作。

當(dāng)然,如果 MySQL Query Optimizer 要是能夠做的再人性化一點(diǎn)將這里的信息換成“Using index for distinct”那就更好更容易讓人理解了,呵呵。

2.我們?cè)賮砜纯赐ㄟ^緊湊索引掃描的示例:

sky@localhost : example 11:03:53> EXPLAIN SELECT DISTINCT user_id 
  -> FROM group_message
  -> WHERE group_id = 2G
*************************** 1. row ***************************
      id: 1
 SELECT_type: SIMPLE
    table: group_message
     type: ref
possible_keys: idx_gid_uid_gc
     key: idx_gid_uid_gc
   key_len: 4
     ref: const
     rows: 4
    Extra: Using WHERE; Using index
1 row in set (0.00 sec)

這里的顯示和通過緊湊索引掃描實(shí)現(xiàn) GROUP BY 也完全一樣。實(shí)際上,這個(gè) Query 的實(shí)現(xiàn)過程中,MySQL 會(huì)讓存儲(chǔ)引擎掃描 group_id = 2 的所有索引鍵,得出所有的 user_id,然后利用索引的已排序特性,每更換一個(gè) user_id 的索引鍵值的時(shí)候保留一條信息,即可在掃描完所有 gruop_id = 2 的索引鍵的時(shí)候完成整個(gè) DISTINCT 操作。

3.下面我們?cè)诳纯礋o法單獨(dú)使用索引即可完成 DISTINCT 的時(shí)候會(huì)是怎樣:

sky@localhost : example 11:04:40> EXPLAIN SELECT DISTINCT user_id 
  -> FROM group_message
  -> WHERE group_id > 1 AND group_id  10G
*************************** 1. row ***************************
      id: 1
 SELECT_type: SIMPLE
    table: group_message
     type: range
possible_keys: idx_gid_uid_gc
     key: idx_gid_uid_gc
   key_len: 4
     ref: NULL
     rows: 32
    Extra: Using WHERE; Using index; Using temporary
1 row in set (0.00 sec)

當(dāng) MySQL 無法僅僅依賴索引即可完成 DISTINCT 操作的時(shí)候,就不得不使用臨時(shí)表來進(jìn)行相應(yīng)的操作了。但是我們可以看到,在 MySQL 利用臨時(shí)表來完成 DISTINCT 的時(shí)候,和處理 GROUP BY 有一點(diǎn)區(qū)別,就是少了 filesort。

實(shí)際上,在 MySQL 的分組算法中,并不一定非要排序才能完成分組操作的,這一點(diǎn)在上面的 GROUP BY 優(yōu)化小技巧中我已經(jīng)提到過了。實(shí)際上這里 MySQL 正是在沒有排序的情況下實(shí)現(xiàn)分組最后完成 DISTINCT 操作的,所以少了 filesort 這個(gè)排序操作。

4.最后再和 GROUP BY 結(jié)合試試看:

sky@localhost : example 11:05:06> EXPLAIN SELECT DISTINCT max(user_id) 
  -> FROM group_message
  -> WHERE group_id > 1 AND group_id  10
  -> GROUP BY group_idG
*************************** 1. row ***************************
      id: 1
 SELECT_type: SIMPLE
    table: group_message
     type: range
possible_keys: idx_gid_uid_gc
     key: idx_gid_uid_gc
   key_len: 4
     ref: NULL
     rows: 32
    Extra: Using WHERE; Using index; Using temporary; Using filesort
1 row in set (0.00 sec)

最后我們?cè)倏匆幌逻@個(gè)和 GROUP BY 一起使用帶有聚合函數(shù)的示例,和上面第三個(gè)示例相比,可以看到已經(jīng)多了 filesort 排序操作了,正是因?yàn)槲覀兪褂昧?MAX 函數(shù)的緣故。要取得分組后的 MAX 值,又無法使用索引完成操作,只能通過排序才行了。

由于 DISTINCT的實(shí)現(xiàn)基本上和 GROUP BY 的實(shí)現(xiàn)差不多,所以這篇文章就不再畫圖展示實(shí)現(xiàn)過程了

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • MySQL中distinct與group by語句的一些比較及用法講解
  • MySQL中distinct語句的基本原理及其與group by的比較
  • MySQL中索引優(yōu)化distinct語句及distinct的多字段操作
  • MySQL中distinct語句去查詢重復(fù)記錄及相關(guān)的性能討論
  • MySQL中distinct和count(*)的使用方法比較
  • 分析MySQL中優(yōu)化distinct的技巧
  • 解析mysql中:單表distinct、多表group by查詢?nèi)コ貜?fù)記錄

標(biāo)簽:駐馬店 陜西 北京 鄂爾多斯 梅河口 昌都 荊門 黔西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL DISTINCT 的基本實(shí)現(xiàn)原理詳解》,本文關(guān)鍵詞  MySQL,DISTINCT,的,基本,實(shí)現(xiàn),;如發(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 DISTINCT 的基本實(shí)現(xiàn)原理詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL DISTINCT 的基本實(shí)現(xiàn)原理詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    一区二区三区四区在线播放| 一区二区三区日韩欧美| 欧美国产综合色视频| 国产一区二区免费视频| 欧美一区二区三区视频在线| 成人va在线观看| 国产婷婷色一区二区三区在线| 国产麻豆91精品| 综合av第一页| 91在线观看成人| 亚洲精品视频在线| 欧美绝品在线观看成人午夜影视| 日本va欧美va精品发布| 久久久99免费| 91久久人澡人人添人人爽欧美| 亚洲一区二区在线免费看| 欧美一区二区三区色| 国产成人精品免费在线| 一区二区三区精品在线| 日韩欧美在线影院| 亚洲人成影院在线观看| 在线综合视频播放| 成人国产一区二区三区精品| 18成人在线观看| 9191久久久久久久久久久| 国产在线视频精品一区| 一级做a爱片久久| 久久亚洲影视婷婷| 欧美亚洲自拍偷拍| 国产精品小仙女| 日韩影视精彩在线| 国产精品国产三级国产普通话三级| 欧美三级午夜理伦三级中视频| 欧美日韩免费一区二区三区视频| 国产麻豆精品久久一二三| 亚洲色图制服丝袜| 国产成人免费网站| 亚洲小说春色综合另类电影| 国产三级精品视频| 最新国产成人在线观看| 国产在线播放一区| 欧美男男青年gay1069videost| 久久久精品一品道一区| 亚洲影院免费观看| 久久久高清一区二区三区| 日韩欧美国产一区二区三区| 91在线视频播放地址| 成人免费视频视频在线观看免费| 国内久久精品视频| 久久99久久久久| 日本大胆欧美人术艺术动态| 亚洲男人的天堂av| 亚洲色图欧洲色图| 亚洲视频你懂的| 久久综合九色欧美综合狠狠| 欧美α欧美αv大片| 日韩精品专区在线影院重磅| 欧美一区二区三区精品| 日韩免费高清电影| 日韩免费一区二区三区在线播放| 91精品国产福利在线观看| 欧美一级片免费看| 26uuu亚洲| 国产精品嫩草影院av蜜臀| 欧美国产一区在线| 国产精品久久久久久久岛一牛影视 | 天堂蜜桃一区二区三区| 午夜成人免费电影| 蜜臀久久久99精品久久久久久| 老司机午夜精品| 国产综合色产在线精品| 激情综合色综合久久综合| 韩国理伦片一区二区三区在线播放| 九九**精品视频免费播放| 国产乱码精品一品二品| 亚洲色图制服丝袜| 日韩视频中午一区| 国产欧美在线观看一区| 亚洲精品国产第一综合99久久| 亚洲国产三级在线| 久久国产尿小便嘘嘘尿| 成人一区二区三区视频在线观看 | 成人av网站免费观看| 色素色在线综合| 欧美一区二区三区成人| 欧美激情资源网| 日韩av电影免费观看高清完整版 | 国产麻豆9l精品三级站| 色综合久久中文字幕综合网| 欧美精品三级日韩久久| 日本一区二区三区dvd视频在线| 亚洲精品欧美激情| 久久99精品国产麻豆婷婷| 91麻豆6部合集magnet| 精品久久久久香蕉网| 一区二区三国产精华液| 国产一区二区三区久久久| 欧美在线观看一二区| 国产日韩欧美亚洲| 日韩黄色片在线观看| 波多野结衣亚洲| 精品国内二区三区| 一区二区三区四区在线| 国产精品资源在线| 欧美精品777| 亚洲精选视频免费看| 国产69精品久久777的优势| 欧美一区在线视频| 亚洲动漫第一页| 色婷婷一区二区| 成人免费在线播放视频| 国产毛片一区二区| 欧美一卡2卡三卡4卡5免费| 亚洲成人自拍一区| 99久久99久久精品免费观看| 国产女同互慰高潮91漫画| 久久成人av少妇免费| 欧美日韩亚洲综合在线 | 国产精品美女www爽爽爽| 久久精品国产亚洲a| 欧美三级韩国三级日本三斤| 日韩毛片精品高清免费| gogo大胆日本视频一区| 国产色一区二区| 激情久久久久久久久久久久久久久久 | 成人短视频下载| 国产亚洲精品福利| 久久疯狂做爰流白浆xx| 日韩一区二区三区免费观看| 午夜精品福利一区二区三区av| 91片在线免费观看| 欧美一区二区三区精品| 免费看欧美女人艹b| 精品蜜桃在线看| 久久 天天综合| 久久精品无码一区二区三区| 国产成人免费在线观看不卡| 中文字幕中文字幕一区| 91在线视频网址| 亚洲国产视频网站| 欧美日韩一级片在线观看| 日韩综合在线视频| 欧美一二三区在线| 狠狠久久亚洲欧美| 国产精品久久久久永久免费观看 | 国产精品一区二区91| 久久久久久9999| av亚洲精华国产精华精| 一区二区三区四区不卡在线 | 亚洲精品一区二区三区精华液| 国内精品久久久久影院色| 国产亚洲一本大道中文在线| 成人高清免费在线播放| 亚洲精品福利视频网站| 欧美精品乱码久久久久久| 国产原创一区二区| 亚洲丝袜精品丝袜在线| 欧美一级夜夜爽| 国产成人精品一区二区三区四区 | 精品国产一区二区三区久久久蜜月 | 91精品国产麻豆| 成人午夜伦理影院| 亚洲高清在线精品| 精品国产91洋老外米糕| 岛国精品在线观看| 亚洲精选视频免费看| 欧美日韩一区二区三区四区| 久久精品一区二区三区不卡牛牛| 懂色av中文字幕一区二区三区| 亚洲青青青在线视频| 欧美少妇bbb| 国产一区欧美一区| 一区二区三区成人在线视频| 欧美电影免费观看高清完整版在线 | 天堂久久久久va久久久久| 日韩三级中文字幕| 国产91在线|亚洲| 亚洲精品免费电影| 欧美va亚洲va香蕉在线| 99国产欧美另类久久久精品| 亚洲18影院在线观看| 717成人午夜免费福利电影| 国产成人亚洲综合a∨婷婷| 一区二区三区视频在线看| 久久亚洲一区二区三区四区| 欧美日韩国产美女| 丰满亚洲少妇av| 久久福利视频一区二区| 亚洲国产成人porn| 亚洲狼人国产精品| 亚洲色图欧美激情| 国产精品久久久久久久午夜片| 日韩一区二区精品在线观看| 91香蕉视频mp4| 成人国产一区二区三区精品| 激情丁香综合五月| 久久国产欧美日韩精品| 美女网站色91| 日韩成人dvd| 亚洲国产成人av网|