DBA大牛MySQL優(yōu)化心得难衰,語句執(zhí)行加速就是這么簡單!

一打開科技類論壇逗栽,最掣窍看到的文章主題就是MySQL性能優(yōu)化了,為什么要優(yōu)化呢?

因為:

數(shù)據(jù)庫出現(xiàn)瓶頸,系統(tǒng)的吞吐量出現(xiàn)訪問速度慢

隨著應(yīng)用程序的運(yùn)行苍凛,數(shù)據(jù)庫的中的數(shù)據(jù)會越來越多趣席,處理時間變長

數(shù)據(jù)讀寫速度緩慢

就是咱們說的“性能問題”,程序員一遇到它總是焦頭爛額!

今天小編對MySQL優(yōu)化總結(jié)了一些心得醇蝴,希望在大家之后的工作中能有所有幫助!

like 前導(dǎo)符優(yōu)化

like模糊查詢形如'%AAA%'和'%AAA'將不會使用索引宣肚,但是業(yè)務(wù)上不可避免可能又需要使用到這種形式。

通常的方法有兩種:

優(yōu)化方案一:使用覆蓋索引悠栓,即查詢出的列只是用索引就可以獲取霉涨,而無須查詢表記錄,這樣也走了索引;

優(yōu)化方案二:使用locate函數(shù)或者position函數(shù)代替like查詢:如table.field like '%AAA%'可以改為locate('AAA', table.field) > 0或POSITION('AAA' IN table.field)>0

in 和 exist

如果查詢的兩個表大小相當(dāng)惭适,那么用in和exists差別不大笙瑟。 如果兩個表中一個較小,一個是大表癞志,則子查詢表大的用exists往枷,子查詢表小的用in: 例如:表A(小表),表B(大表)

示例一:

示例二:

not in 和 not exist

如果查詢語句使用了not in 那么內(nèi)外表都進(jìn)行全表掃描凄杯,沒有用到索引;而not exist 的子查詢依然能用到表上的索引错洁。所以無論哪個表大,用not exists都比not in要快!

子查詢優(yōu)化

MySQL 5.6 之前的版本對子查詢處理:不會將查詢的結(jié)果集計算出來用作與其他表做join,outer表每掃描一條數(shù)據(jù)戒突,子查詢都會被重新執(zhí)行一遍屯碴。

MySQL 5.6 對子查詢的處理 :將子查詢的結(jié)果集 cache 到臨時表里,臨時表索引主要用來移除重復(fù)記錄膊存,并且隨后也可能用于做join查詢导而,這種技術(shù)在 5.6 中叫做物化的子查詢,物化子查詢可以看到select_type字段為subquery隔崎,而在 5.5 里為DEPENDENT SUBQUERY今艺。

子查詢一般都可以改成表的關(guān)聯(lián)查詢,子查詢會有臨時表的創(chuàng)建爵卒、銷毀洼滚,效率低下。

straight_join

mysql hint:

Mysql 優(yōu)化器在處理多表的關(guān)聯(lián)的時候技潘,很有可能會選擇錯誤的驅(qū)動表進(jìn)行關(guān)聯(lián)遥巴,導(dǎo)致了關(guān)聯(lián)次數(shù)的增加,從而使得sql語句執(zhí)行變得非常的緩慢享幽。

這個時候需要有經(jīng)驗的DBA進(jìn)行判斷铲掐,選擇正確的驅(qū)動表,這個時候 straightjoin 就起了作用了值桩,下面我們來看一看使用straight_join進(jìn)行優(yōu)化的案例:

嘗試采用user表做驅(qū)動表摆霉,使用straight_join強(qiáng)制連接順序:

高效分頁

傳統(tǒng)分頁:

select?*?from?table?limit?10000,10?

limit原理:

Limit 10000,10

偏移量越大則越慢

推薦分頁:

復(fù)雜關(guān)聯(lián)SQL的優(yōu)化

首先查詢返回的結(jié)果集,通常查詢返回的結(jié)果集很少,是有優(yōu)化的空間的携栋。

通過查看執(zhí)行計劃搭盾,查看優(yōu)化器選擇的驅(qū)動表,從執(zhí)行計劃的rows可以大致反應(yīng)出問題的所在婉支。

搞清各表的關(guān)聯(lián)關(guān)系鸯隅,查看關(guān)聯(lián)字段是否有合適的索引。

使用straight_join關(guān)鍵詞來強(qiáng)制調(diào)整驅(qū)動表的選擇向挖,對優(yōu)化的想法進(jìn)行驗證蝌以。

如果條件允許,對復(fù)雜的SQL進(jìn)行拆分何之。盡可能越簡單越好跟畅。

force index

有時優(yōu)化器可能由于統(tǒng)計信息不準(zhǔn)確等原因,沒有選擇最優(yōu)的執(zhí)行計劃溶推,可以人為改變mysql的執(zhí)行計劃徊件,例如:

count的優(yōu)化

按照效率排序的話,count(字段)

總結(jié)

MySQL 性能優(yōu)化 最主要是理解 innodb 的索引原理及結(jié)構(gòu)及 SQL 的執(zhí)行計劃蒜危,在不斷累積經(jīng)驗的基礎(chǔ)上熟能生巧虱痕。

覺得不錯請點贊支持,歡迎留言或進(jìn)我的個人群855801563領(lǐng)取【架構(gòu)資料專題目合集90期】舰褪、【BATJTMD大廠JAVA面試真題1000+】,本群專用于學(xué)習(xí)交流技術(shù)疏橄、分享面試機(jī)會占拍,拒絕廣告,我也會在群內(nèi)不定期答題捎迫、探討

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晃酒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子窄绒,更是在濱河造成了極大的恐慌贝次,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彰导,死亡現(xiàn)場離奇詭異蛔翅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)位谋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門山析,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掏父,你說我怎么就攤上這事笋轨。” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵爵政,是天一觀的道長仅讽。 經(jīng)常有香客問我,道長钾挟,這世上最難降的妖魔是什么洁灵? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮等龙,結(jié)果婚禮上处渣,老公的妹妹穿的比我還像新娘。我一直安慰自己蛛砰,他們只是感情好罐栈,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泥畅,像睡著了一般荠诬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上位仁,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天柑贞,我揣著相機(jī)與錄音,去河邊找鬼聂抢。 笑死钧嘶,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的琳疏。 我是一名探鬼主播有决,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼空盼!你這毒婦竟也來了书幕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤揽趾,失蹤者是張志新(化名)和其女友劉穎台汇,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篱瞎,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡苟呐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了俐筋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掠抬。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖校哎,靈堂內(nèi)的尸體忽然破棺而出两波,到底是詐尸還是另有隱情瞳步,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布腰奋,位于F島的核電站单起,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏劣坊。R本人自食惡果不足惜嘀倒,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望局冰。 院中可真熱鬧测蘑,春花似錦、人聲如沸康二。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沫勿。三九已至挨约,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間产雹,已是汗流浹背诫惭。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留蔓挖,地道東北人夕土。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像瘟判,于是被迫代替她去往敵國和親怨绣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

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