order by優(yōu)化舟陆,避免filesort

filesort

當(dāng)我們在MySQL執(zhí)行計劃中坠非,遇到了Using filesort敏沉,這就證明MySQL在執(zhí)行這條語句的時候用到了filesort,而沒有使用我們的索引進行排序炎码。所以就需要進行優(yōu)化盟迟。
具體filesort的過程如下:
1、根據(jù)表的索引或者全表掃描潦闲,讀取所有滿足條件的記錄攒菠。
2、對與每一行歉闰,存儲一對值到緩沖區(qū)(排序列辖众,行記錄指針),一個是排序的索引列的值和敬,即order by用到的列值赵辕,和指向該行數(shù)據(jù)的行指針,緩沖區(qū)的大小為sort_buffer_size大小概龄。
3、當(dāng)緩沖區(qū)滿后饲握,運行一個快速排序(qsort)來將緩沖區(qū)中數(shù)據(jù)排序私杜,并將排序完的數(shù)據(jù)存儲到一個臨時文件,并保存一個存儲塊的指針救欧,當(dāng)然如果緩沖區(qū)不滿衰粹,則不會重建臨時文件了。
4笆怠、重復(fù)以上步驟铝耻,直到將所有行讀完,并建立相應(yīng)的有序的臨時文件蹬刷。
5瓢捉、對塊級進行排序,這個類似與歸并排序算法办成,只通過兩個臨時文件的指針來不斷交換數(shù)據(jù)泡态,最終達到兩個文件,都是有序的迂卢。
6某弦、重復(fù)5直到所有的數(shù)據(jù)都排序完畢桐汤。
7、采取順序讀的方式靶壮,將每行數(shù)據(jù)讀入內(nèi)存怔毛,并取出數(shù)據(jù)傳到客戶端,這里讀取數(shù)據(jù)時并不是一行一行讀腾降,讀如緩存大小由read_rnd_buffer_size來指定拣度。

優(yōu)化使用索引排序

我們的目標(biāo)就是優(yōu)化為Using index
官網(wǎng)文檔里邊有很多優(yōu)化的方法,這里就只列舉其中講到的幾點蜂莉。
1.select字段中只包含索引字段蜡娶,避免包含無關(guān)字段。

SELECT pk, key_part1, key_part2 FROM t1
  ORDER BY key_part1, key_part2;

這樣避免了filesort映穗,pk是主鍵窖张,這個也是可以通過索引查詢到了。如果使用*的話蚁滋,涉及到了回表宿接,這樣操作,還不如直接進行filesort辕录。不管怎樣睦霎,我們?nèi)粘i_發(fā)過程中,都應(yīng)該避免使用*走诞。
2.使用constant查詢聯(lián)合order by

SELECT * FROM t1
  WHERE key_part1 = constant
  ORDER BY key_part2;

使用了constant查詢后副女,之后對索引進行order by,這樣做后大幾率會比全表查詢效率要好蚣旱!
3.避免order by條件中一個desc 一個 asc

還有更多細節(jié)可以參考官方文檔

還有很多原則碑幅,總之最主要的就是我們的MySQL innodby引擎使用的是B+樹結(jié)構(gòu)存儲數(shù)據(jù),我們要做的就是盡可能的讓我們查詢的字段只存在于索引樹中塞绿;或者通過索引沟涨,我們能夠有效的過濾出我們需要的數(shù)據(jù)id,然后回表异吻。

https://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html
https://www.cnblogs.com/aeolian/p/10212892.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末裹赴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子诀浪,更是在濱河造成了極大的恐慌棋返,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笋妥,死亡現(xiàn)場離奇詭異懊昨,居然都是意外死亡,警方通過查閱死者的電腦和手機春宣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門酵颁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫉你,“玉大人,你說我怎么就攤上這事躏惋∮奈郏” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵簿姨,是天一觀的道長距误。 經(jīng)常有香客問我,道長扁位,這世上最難降的妖魔是什么准潭? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮域仇,結(jié)果婚禮上刑然,老公的妹妹穿的比我還像新娘。我一直安慰自己暇务,他們只是感情好泼掠,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著垦细,像睡著了一般择镇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上括改,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天腻豌,我揣著相機與錄音,去河邊找鬼嘱能。 笑死饲梭,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的焰檩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼订框,長吁一口氣:“原來是場噩夢啊……” “哼析苫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起穿扳,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤衩侥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后矛物,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茫死,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年履羞,在試婚紗的時候發(fā)現(xiàn)自己被綠了峦萎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屡久。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖爱榔,靈堂內(nèi)的尸體忽然破棺而出被环,到底是詐尸還是另有隱情,我是刑警寧澤详幽,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布筛欢,位于F島的核電站,受9級特大地震影響唇聘,放射性物質(zhì)發(fā)生泄漏版姑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一迟郎、第九天 我趴在偏房一處隱蔽的房頂上張望剥险。 院中可真熱鬧,春花似錦谎亩、人聲如沸炒嘲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夫凸。三九已至,卻和暖如春阱持,著一層夾襖步出監(jiān)牢的瞬間夭拌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工衷咽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鸽扁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓镶骗,卻偏偏與公主長得像桶现,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鼎姊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容