如何將你的 MySQL 查詢速度提升 300 倍

在進(jìn)行性能分析前锨苏,需要先定位耗時(shí)查詢婆赠。

MySQL提供了內(nèi)建的耗時(shí)查詢?nèi)罩玖臃弧J褂们罢蜷_my.cnf文件,將slow_query_log設(shè)置為"On"旧乞。 同時(shí)將long_query_time設(shè)置為一個(gè)對(duì)一次查詢來說比較慢的時(shí)間(秒數(shù))蔚润,比如0.2。slow_query_log_file設(shè)置為你想保存日志文件的路徑尺栖。然后運(yùn)行代碼嫡纠,執(zhí)行時(shí)間超過設(shè)定上限的查詢將會(huì)被記錄到日志中。

一旦定位這些煩人的查詢延赌,就可以探究慢的原因除盏。MySQL提供了EXPLAIN關(guān)鍵字〈煲裕可以與SELECT者蠕、DELETE、INSERT掐松、REPLACE踱侣、UPDATE語句一起使用。只需要如下一樣添加到查詢開始處:

EXPLAIN?SELECT?picture.id,?picture.title

FROM?picture

LEFT?JOIN?album?ON?picture.album_id?=?album.idWHERE?album.user_id?=?1;

結(jié)果是對(duì)數(shù)據(jù)訪問過程的解析大磺。每行代表一個(gè)查詢相關(guān)的數(shù)據(jù)表:

重點(diǎn)是表名抡句、使用的key、查詢執(zhí)行時(shí)所掃描的行數(shù)杠愧。

這個(gè)查詢掃描了picture表2百萬行待榔,對(duì)每個(gè)picture記錄掃描了album表2萬行。意味著流济,該查詢實(shí)際掃描了album表400億行锐锣。這個(gè)過程可以更高效腌闯。

索引

使用索引,可以極大提升性能雕憔。比如地址簿中的名字绑嘹。找一個(gè)名字,你可以從頭翻到尾橘茉,也可以找到相應(yīng)的字符標(biāo)簽頁(yè)來快速定位。

使用索引可以避免無必要的表掃描姨丈。比如在picture.album_id上添加索引:

ALTER?TABLE?picture?ADD?INDEX(album_id);

現(xiàn)在執(zhí)行查詢畅卓,就不會(huì)掃描整個(gè)picture列表了。首先蟋恬,所有的album表會(huì)被掃描以找到屬于該用戶的album翁潘,然后,使用album_id列索引快速定位對(duì)應(yīng)的picture歼争。掃描的行數(shù)減少到了20萬拜马,比原始查詢快了317倍。

按照以下方式添加索引可以確保兩張表都能使用對(duì)應(yīng)鍵:

ALTER?TABLE?album?ADD?INDEX(user_id);

這次沐绒,album表不會(huì)被全部掃描俩莽,通過user_id鍵就可以精確定位相應(yīng)的album。然后這100個(gè)album被掃描后乔遮,通過album_id鍵相關(guān)的picture也可以快速找到扮超。每張表都用到了一個(gè)鍵進(jìn)行查詢性能優(yōu)化,結(jié)果比原始查詢快了380倍蹋肮。

但是并不意味著可以隨意添加索引出刷,因?yàn)樗饕龝?huì)導(dǎo)致寫數(shù)據(jù)庫(kù)用時(shí)增長(zhǎng)。所以使用索引導(dǎo)致讀用時(shí)縮短坯辩,寫用時(shí)增長(zhǎng)馁龟。因此,如果能提升讀性能時(shí)再添加索引漆魔。使用EXPLAIN來確認(rèn)索引是否被查詢用到坷檩,沒有就刪除。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末有送,一起剝皮案震驚了整個(gè)濱河市淌喻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雀摘,老刑警劉巖裸删,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異阵赠,居然都是意外死亡涯塔,警方通過查閱死者的電腦和手機(jī)肌稻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匕荸,“玉大人爹谭,你說我怎么就攤上這事¢簧Γ” “怎么了诺凡?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)践惑。 經(jīng)常有香客問我腹泌,道長(zhǎng),這世上最難降的妖魔是什么尔觉? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任凉袱,我火速辦了婚禮,結(jié)果婚禮上侦铜,老公的妹妹穿的比我還像新娘专甩。我一直安慰自己,他們只是感情好钉稍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布涤躲。 她就那樣靜靜地躺著,像睡著了一般贡未。 火紅的嫁衣襯著肌膚如雪篓叶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天羞秤,我揣著相機(jī)與錄音缸托,去河邊找鬼。 笑死瘾蛋,一個(gè)胖子當(dāng)著我的面吹牛俐镐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哺哼,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼佩抹,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了取董?” 一聲冷哼從身側(cè)響起棍苹,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茵汰,沒想到半個(gè)月后枢里,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年栏豺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彬碱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奥洼,死狀恐怖巷疼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情灵奖,我是刑警寧澤嚼沿,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站瓷患,受9級(jí)特大地震影響伏尼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尉尾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望燥透。 院中可真熱鬧沙咏,春花似錦、人聲如沸班套。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吱韭。三九已至吆豹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間理盆,已是汗流浹背痘煤。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猿规,地道東北人衷快。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像姨俩,于是被迫代替她去往敵國(guó)和親蘸拔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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

  • 在進(jìn)行性能分析前环葵,需要先定位耗時(shí)查詢调窍。 MySQL 提供了內(nèi)建的耗時(shí)查詢?nèi)罩尽J褂们罢旁猓蜷_my.cnf文件邓萨,將sl...
    dreamer_lk閱讀 414評(píng)論 0 4
  • mysql性能優(yōu)化-慢查詢分析先誉、優(yōu)化索引和配置 分類:Mysql/postgreSQL 目錄 一湿刽、優(yōu)化概述 二、查...
    CaesarXia閱讀 2,989評(píng)論 1 46
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理褐耳,服務(wù)發(fā)現(xiàn)诈闺,斷路器,智...
    卡卡羅2017閱讀 134,665評(píng)論 18 139
  • MySQL不權(quán)威總結(jié) 歡迎閱讀 本文并非事無巨細(xì)的mysql學(xué)習(xí)資料铃芦,而是選擇其中重要雅镊、困難、易錯(cuò)的部分進(jìn)行系統(tǒng)地...
    liufxlucky365閱讀 2,591評(píng)論 0 26
  • 引子 對(duì)于一條SQL刃滓,開發(fā)同學(xué)最先關(guān)心的啥仁烹? 我覺得還不到這個(gè)SQL在數(shù)據(jù)庫(kù)的執(zhí)行過程,而是這條SQL是否能盡快的...
    大頭8086閱讀 2,633評(píng)論 2 14