mysql极客_极客mysql16
1.MySQL會(huì)為每個(gè)線程分配一個(gè)內(nèi)存(sort_buffer)用于排序該內(nèi)存大小為sort_buffer_size
1>如果排序的數(shù)據(jù)量小于sort_buffer_size,排序?qū)?huì)在內(nèi)存中完成
2>如果排序數(shù)據(jù)量很大,內(nèi)存中無(wú)法存下這么多數(shù)據(jù),則會(huì)使用磁盤臨時(shí)文件來(lái)輔助排序,也稱外部排序
3>在使用外部排序時(shí),MySQL會(huì)分成好幾份單獨(dú)的臨時(shí)文件用來(lái)存放排序后的數(shù)據(jù),然后在將這些文件合并成一個(gè)大文件
2.mysql會(huì)通過(guò)遍歷索引將滿足條件的數(shù)據(jù)讀取到sort_buffer,并且按照排序字段進(jìn)行快速排序
1>如果查詢的字段不包含在輔助索引中,需要按照輔助索引記錄的主鍵返回聚集索引取出所需字段
2>該方式會(huì)造成隨機(jī)IO,在MySQL5.6提供了MRR的機(jī)制,會(huì)將輔助索引匹配記錄的主鍵取出來(lái)在內(nèi)存中進(jìn)行排序,然后在回表
3>按照情況建立聯(lián)合索引來(lái)避免排序所帶來(lái)的性能損耗,允許的情況下也可以建立覆蓋索引來(lái)避免回表
全字段排序
1.通過(guò)索引將所需的字段全部讀取到sort_buffer中
2.按照排序字段進(jìn)行排序
3.將結(jié)果集返回給客戶端
缺點(diǎn):
1.造成sort_buffer中存放不下很多數(shù)據(jù),因?yàn)槌伺判蜃侄芜€存放其他字段,對(duì)sort_buffer的利用效率不高
2.當(dāng)所需排序數(shù)據(jù)量很大時(shí),會(huì)有很多的臨時(shí)文件,排序性能也會(huì)很差
優(yōu)點(diǎn):MySQL認(rèn)為內(nèi)存足夠大時(shí)會(huì)優(yōu)先選擇全字段排序,因?yàn)檫@種方式比rowid 排序避免了一次回表操作
rowid排序
1.通過(guò)控制排序的行數(shù)據(jù)的長(zhǎng)度來(lái)讓sort_buffer中盡可能多的存放數(shù)據(jù),max_length_for_sort_data
2.只將需要排序的字段和主鍵讀取到sort_buffer中,并按照排序字段進(jìn)行排序
3.按照排序后的順序,取id進(jìn)行回表取出想要獲取的數(shù)據(jù)
4.將結(jié)果集返回給客戶端
優(yōu)點(diǎn):更好的利用內(nèi)存的sort_buffer進(jìn)行排序操作,盡量減少對(duì)磁盤的訪問(wèn)
缺點(diǎn):回表的操作是隨機(jī)IO,會(huì)造成大量的隨機(jī)讀,不一定就比全字段排序減少對(duì)磁盤的訪問(wèn)
3.按照排序的結(jié)果返回客戶所取行數(shù)
總結(jié)
以上是生活随笔為你收集整理的mysql极客_极客mysql16的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【算法系列之六】两整数之和
- 下一篇: SQL Server 批量更新字段值为R