日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

MySQL源代碼的海洋中游弋 初探MySQL之SQL執(zhí)行過

系統(tǒng) 2854 0

MySQL源代碼的海洋中游弋 初探MySQL之SQL執(zhí)行過程

五月 15, 2012 ?by? ?·? 14 Comments ?

導(dǎo)讀:
???????? 2012年5月12日,MySQL技術(shù)群-北京技術(shù)圈的MySQL愛好者,聚集搜狐公司,舉辦MySQL數(shù)據(jù)庫技術(shù)沙龍,本文內(nèi)容為搜狐DBA團隊古雷(外號:古大師,因研究佛學(xué)而來)分享的MySQL之SQL執(zhí)行過程,先整理成文章的方式供大家閱讀,古大師也是mysqlops中文網(wǎng)的技術(shù)編輯之一。

?

序言:
?不積跬步,無以至千里;不積小流,無以成江?!秳駥W(xué)》荀子
?吾生也有涯,而知也無涯。以有涯隨無涯,殆已——《養(yǎng)生主》莊子

?

Group by

?select name1 from test group by name1;
?從InnoDB存儲引擎表讀出一條記錄,寫入臨時表,循環(huán)往復(fù)
?臨時表中,group by的key(本例中為name1)
–每個KEY值只有一行記錄
–(相同KEY值寫入,檢測到重復(fù)鍵錯誤,忽略此錯誤并繼續(xù))
?從臨時表中讀取記錄(全部或KEY)
?排序(filesort)
?發(fā)送排序結(jié)果

?

?

Group by + sum

?select sum(id) from test group by name1;
?從InnoDB存儲引擎表讀取一條記錄,寫入臨時表,循環(huán)往復(fù)
?臨時表中g(shù)roup by的key(本例中為name1)
–有一個hash索引
–每個KEY值只有一行記錄
–寫入臨時表每行記錄時,更新相同KEY的sum值
?以group by的key對臨時表排序(filesort)
?發(fā)送排序結(jié)果
?If you use GROUP BY, output rows are sorted according to the GROUP BY columns as if you had an ORDER BY for the same columns. To avoid the overhead of sorting that GROUP BY produces, add ORDER BY NULL
?

臨時表寫入的痕跡1

?

?

group by使用索引時,不需要臨時表

?從索引中讀取記錄,計算count,由于索引是按照group by的key排序的,因此可以邊讀記錄邊計算當前key的count,當讀的key值要變化時,則剛剛計算的count值就是那個key的最終count值,把結(jié)果發(fā)送給客戶端,再繼續(xù)從索引讀以下記錄。

?

什么是Nested Loop Join(嵌套循環(huán)算法)

?

DEPENDENT SUBQUERY

?

DERIVED(派生表)

?

兩表JOIN + ORDER BY

?循環(huán)讀取ttt表的記錄,寫入cache,直至都寫完
?循環(huán)從tttt表中讀取記錄
?每讀一條,再循環(huán)讀取cache中記錄,并做比較
?滿足條件的記錄寫入臨時表
?對臨時表排序
?發(fā)送結(jié)果
?
?Using join buffer是循環(huán)讀取big表并與join buffer中的保存的table2記錄比較
?Using temporary是保存匹配的記錄,然后需要排序

?

?

總結(jié)

?之前看手冊上的諸多概念,有空中樓閣的感覺
?通過跟蹤源碼,則逐漸有腳踏實地的感覺
?希望真正看懂explain的輸出

?

轉(zhuǎn)自: http://www.mysqlops.com/2012/05/15/mysql-sql-analyze.html

MySQL源代碼的海洋中游弋 初探MySQL之SQL執(zhí)行過程


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 柘荣县| 怀安县| 苍南县| 和龙市| 巴青县| 卓资县| 尉氏县| 芜湖市| 花莲市| 衡阳县| 弋阳县| 康定县| 花莲市| 文成县| 确山县| 三明市| 怀宁县| 个旧市| 成都市| 铅山县| 临邑县| 津市市| 青田县| 竹山县| 潜江市| 海丰县| 湘潭县| 大港区| 宜章县| 惠东县| 炉霍县| 乐业县| 阿城市| 宜宾县| 承德市| 当阳市| 克拉玛依市| 营山县| 定安县| 富蕴县| 连州市|