MySQL優(yōu)化

1.查詢優(yōu)化

1.1小表驅(qū)動(dòng)大表

image-20200512174213505

emp有500000條數(shù)據(jù),empnos有7條數(shù)據(jù),emp是大表,empnos是小表

image-20200512175240591
image-20200511172852730

1.2order by關(guān)鍵字優(yōu)化

表字段多的時(shí)候刨晴,避免使用select *

image-20200511175643225

ORDER BY子句,盡量使用Index方式排序,避免使用FileSort方式排序

盡可能在索引列上完成排序操作卵凑,遵照索引建的最佳左前綴

image-20200511180402492

使用表test03,簡(jiǎn)歷聯(lián)合索引idx_test03_c1234(c1,c2,c3,c4)

image-20200512183458561

order by使用索引最左前綴

image-20200512182202978

如果where使用索引的最左前綴定義為常量,則order by能使用索引

image-20200512182448571

不能使用索引排序

  1. 排序不一致

    image-20200512183207797
  2. 丟失最左前綴索引

    image-20200512183220342
  3. 丟失中間索引,索引中斷

    image-20200512183233368
  4. 使用了非索引字段進(jìn)行排序

    image-20200512183244339
  5. 使用了in(相當(dāng)于范圍查詢)

    image-20200512183256565

order引起索引失效的各種情況:

image-20200512183148547

filesort的兩種算法:單路排序與雙路排序

雙路排序:MySQL 4.1 之前使用的雙路排序娶桦,通過(guò)兩次掃描磁盤(pán)得到數(shù)據(jù)艰匙。讀取行指針和 order by 列并對(duì)其進(jìn)行排序,掃描排序好的列表障本,按照列表中的值重新從列表中讀取對(duì)應(yīng)的數(shù)據(jù)輸出。

但是雙路排序會(huì)掃描兩次磁盤(pán)响鹃,磁盤(pán)IO是非常消耗性能的驾霜,所以后面被單路排序取代。

單路排序:從磁盤(pán)中讀取查詢需要的所有列买置,按照 order by 列在 sort_buffer 緩沖區(qū)對(duì)他們進(jìn)行排序寄悯,然后掃描排序后的列表輸出。因?yàn)閱温放判蛐矢於橐澹苊饬硕巫x取數(shù)據(jù)猜旬,把隨機(jī)IO變成了順序IO脆栋,但是會(huì)使用更多的空間。

但是單路排序算法可能會(huì)導(dǎo)致一個(gè)問(wèn)題:如果數(shù)據(jù)量過(guò)大洒擦,一次讀取不完椿争,就會(huì)導(dǎo)致讀取的次數(shù)比雙路排序多。

因?yàn)樽x取操作是在 sort_buffer 中熟嫩,如果數(shù)據(jù)量過(guò)大秦踪,超出了 sort_buffer 的容量,導(dǎo)致每次只能讀取 sort_buffer 容量大小的數(shù)據(jù)進(jìn)行排序掸茅,排完再取椅邓,導(dǎo)致多次IO。

優(yōu)化策略

  • 增大sort_buffer_size參數(shù)的設(shè)置
  • 增大max_length_for_sort_data參數(shù)的設(shè)置

1.3group by

同order by

group by 實(shí)質(zhì)是先排序后分組,遵照索引鍵的最佳左前綴

當(dāng)無(wú)法使用索引列昧狮,增大max_length_for_sort_data參數(shù)的設(shè)置+增大sort_buffer_size參數(shù)的設(shè)置

where高于having,能寫(xiě)在where限定的條件就不要去having限定了景馁。

2.慢查詢?nèi)罩?/h3>

查看慢查詢是否開(kāi)啟及日志存放位置: show variables like '%slow_query_log%';

開(kāi)啟慢查詢?nèi)罩? set global slow_query_log=1;

image-20200511224122389

查看慢查詢閾值: show variables like 'long_query_time';

設(shè)置閾值為5s: set global long_query_time=5;

image-20200511224305509

測(cè)試:

image-20200512214511048

查看日志: cat /www/server/data/mysql-slow.log

image-20200512214533710

3.show profiles

mysql提供可以用來(lái)分析當(dāng)前會(huì)話中語(yǔ)句執(zhí)行的資源消耗情況《好可以用于SQL的調(diào)優(yōu)測(cè)量

官網(wǎng):http://dev.mysql.com/doc/refman/5.5/en/show-profile.html

分析步驟:

  1. 是否支持合住,看看當(dāng)前的SQL版本是否支持

  2. 開(kāi)啟功能,默認(rèn)是關(guān)閉撒璧,使用前需要開(kāi)啟:

    查看是否開(kāi)啟: show variables like 'profiling';

    image-20200512220411099

    開(kāi)啟: set profiling=on;

    image-20200512220515182
  3. 運(yùn)行SQL

    image-20200512220928439
  4. 查看結(jié)果透葛,show profiles;

    image-20200512220946991
  5. 診斷SQL卿樱,show profile cpu,block io for query 上一步前面的問(wèn)題SQL 數(shù)字號(hào)碼僚害;

    對(duì)上面第六句sql進(jìn)行cpu資源占用,磁盤(pán)IO進(jìn)行具體分析

    show profile cpu,block io for query 6;

    image-20200512221201424
  6. 日常開(kāi)發(fā)需要注意的結(jié)論

    • converting HEAP to MyISAM 查詢結(jié)果太大,內(nèi)存都不夠用了往磁盤(pán)上搬了繁调。
    • Creating tmp table 創(chuàng)建臨時(shí)表:拷貝數(shù)據(jù)到臨時(shí)表,用完再刪除
    • Copying to tmp table on disk 把內(nèi)存中臨時(shí)表復(fù)制到磁盤(pán)贡珊,危險(xiǎn)!I婺佟门岔!
    • locked

4.全局查詢?nèi)罩?/h3>

只能在測(cè)試環(huán)境使用,切勿在生產(chǎn)環(huán)境使用!!!

查看是否開(kāi)啟及全局日志文件存放位置: show variables like '%general_log%';

image-20200512221702940

開(kāi)啟全局日志: set global general_log=1;

image-20200512221724222

測(cè)試:

image-20200512222019965
image-20200512222029188

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市烤送,隨后出現(xiàn)的幾起案子寒随,更是在濱河造成了極大的恐慌,老刑警劉巖帮坚,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妻往,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡试和,警方通過(guò)查閱死者的電腦和手機(jī)讯泣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)阅悍,“玉大人好渠,你說(shuō)我怎么就攤上這事昨稼。” “怎么了拳锚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵假栓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我霍掺,道長(zhǎng)匾荆,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任杆烁,我火速辦了婚禮牙丽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兔魂。我一直安慰自己烤芦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布入热。 她就那樣靜靜地躺著拍棕,像睡著了一般晓铆。 火紅的嫁衣襯著肌膚如雪勺良。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天骄噪,我揣著相機(jī)與錄音尚困,去河邊找鬼。 笑死链蕊,一個(gè)胖子當(dāng)著我的面吹牛事甜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滔韵,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼逻谦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了陪蜻?” 一聲冷哼從身側(cè)響起邦马,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宴卖,沒(méi)想到半個(gè)月后滋将,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡症昏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年随闽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肝谭。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掘宪,死狀恐怖蛾扇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情添诉,我是刑警寧澤屁桑,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站栏赴,受9級(jí)特大地震影響蘑斧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜须眷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一竖瘾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧花颗,春花似錦捕传、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至棒呛,卻和暖如春聂示,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背簇秒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工鱼喉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人趋观。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓扛禽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親皱坛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子编曼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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