mysql 性能優(yōu)化

1、服務(wù)器層面:參數(shù)配置優(yōu)化汗唱、減少客戶端使用連接數(shù) --可考慮使用緩存

2靴跛、架構(gòu)層面:”讀寫分離、分庫渡嚣、分表、分片

3肥印、業(yè)務(wù)sql層面:查看慢查詢?nèi)罩臼兑ql優(yōu)化


show variables like '%slow_query%'; ---默認(rèn)關(guān)閉

查看日志路徑

show variables like '%long_query%'; ---多長時(shí)間是慢查詢呢?

慢查詢時(shí)間設(shè)置

怎么修改默認(rèn)配置深碱?

vim /etc/my.cnf

linux?文件路徑


修改參數(shù)


查看最慢的10條sql日志?

mysql -u root -p?

show full processlist; ---查看客戶端鏈接

查看客戶端鏈接

show?global?status;---查看服務(wù)端狀態(tài)值

show engine?innodb? status;--?查看innodb狀態(tài)


innodb運(yùn)行狀態(tài)腹鹉、查看死鎖IO等

explain執(zhí)行順序怎么看?

id值不同 按ID從大到小執(zhí)行


id值相同敷硅,從上到下執(zhí)行

總節(jié):id查詢順序功咒,先從大到小,再從上到下绞蹦。調(diào)整表順序力奋,可得到不同id執(zhí)行順序。優(yōu)化原則幽七,小表驅(qū)動大表景殷,即小表放前面

一、具體案例

我們來執(zhí)行一條非常簡單的代碼:

expain select * from t1,t2,t3 where t1.id=t2.id and t2.id=t2.id;

執(zhí)行之后的結(jié)果如下:

發(fā)現(xiàn)出來了很多的字段,這么多字段其實(shí)也沒必要每個(gè)都重點(diǎn)關(guān)注猿挚,上面圖片用紅色框框標(biāo)出了5個(gè)字段咐旧,這些是需要重點(diǎn)關(guān)注的。下面具體來說說這5個(gè)字段的含義绩蜻。

1.type

表示訪問表的方式铣墨,一共有6種。

從最好到最差的結(jié)果依次如下:

system > const > eq_ref > ref > range > index > ALL

注意:一個(gè)好的SQL語句至少要達(dá)到range級別办绝!杜絕出現(xiàn)all級別伊约。

system: 表示結(jié)果集僅有一行;

const: 表示通過主鍵或者唯一鍵鍵查找數(shù)據(jù)時(shí)只匹配最多一行數(shù)據(jù)八秃;

eq_ref: 該類型多出現(xiàn)在多表join場景碱妆,通過主鍵或者唯一鍵訪問表;

對于前表b的每行記錄昔驱,都只能匹配到后表a的一行記錄并且查詢的比較操作通常是=疹尾,查詢效率較高。

ref: 此類型通常出現(xiàn)在sql使用非唯一或非主鍵索引骤肛, 或者是使用最左前綴規(guī)則索引的查詢纳本;

range: 表示where條件使用索引范圍查詢,當(dāng) type 是 range 時(shí),ref 字段為 NULL腋颠。

index: 表示全索引掃描繁成, 掃描所有的索引記錄, 而不掃描數(shù)據(jù);

index 類型通常會出現(xiàn)在覆蓋索引中,所要查詢的數(shù)據(jù)直接在索引中就可以訪問淑玫, 而不用回表掃描數(shù)據(jù). 此時(shí)Extra 字段 會顯示 Using index巾腕。

還有一種是全表掃描時(shí)通過索引順序訪問數(shù)據(jù)。此時(shí)并不會在Extra提示 using index絮蒿。

ALL: 表示執(zhí)行計(jì)劃選擇全表掃描尊搬,當(dāng)執(zhí)行計(jì)劃出現(xiàn)type 為all 時(shí),我們盡量通過修改索引的方式讓查詢利用索引土涝。

2.key

此字段是 MySQL 在當(dāng)前查詢時(shí)所真正使用到的索引佛寿。

如果沒有選擇索引,值是NULL但壮。

可以采取強(qiáng)制索引方式冀泻。

3.key_len

key_len表示執(zhí)行計(jì)劃所選擇的索引長度有多少字節(jié),通常我們可借此判斷聯(lián)合索引有多少列蜡饵。

key_len 大小的計(jì)算規(guī)則是:

一般地弹渔,key_len 等于索引列類型字節(jié)長度,例如int類型為4 bytes溯祸,bigint為8 bytes捞附;

如果是字符串類型巾乳,還需要同時(shí)考慮字符集因素,例如:CHAR(30) UTF8則key_len至少是90 bytes鸟召;

若該列類型定義時(shí)允許NULL胆绊,其key_len還需要再加 1 bytes;

若該列類型為變長類型欧募,例如 VARCHAR(TEXT\BLOB不允許整列創(chuàng)建索引压状,如果創(chuàng)建部分索引也被視為動態(tài)列類型),其key_len還需要再加 2 bytes跟继。

4.rows

表示的是掃描行數(shù)种冬。

記住:該值是個(gè)預(yù)估值舔糖,所以并非是完全準(zhǔn)確的值娱两。

MySQL 查詢優(yōu)化器根據(jù)統(tǒng)計(jì)信息,估算 SQL 要查找到結(jié)果集需要掃描讀取的數(shù)據(jù)行數(shù)金吗。

原則上 rows 越少越好十兢。

5.extra

該列會提示優(yōu)化執(zhí)行計(jì)劃的額外的信息。

注意摇庙,常見的不太友好的旱物、值得大家關(guān)注的有如下幾種:

Using index。表示該sql利用覆蓋索引掃描卫袒,也即從只訪問索引即可獲取到所需的數(shù)據(jù)宵呛,而不用回表。

Using where夕凝。表示該sql 回表獲取數(shù)據(jù)了宝穗。什么是回表呢? 其實(shí)就是僅僅通過訪問索引不能滿足獲取所需的數(shù)據(jù)码秉,需要訪問表的page 頁逮矛。

如果和Using index 同時(shí)出現(xiàn),說明where條件通過索引定位數(shù)據(jù)泡徙,然后回表,再過濾所需要的數(shù)據(jù)膜蠢。

Using filesort堪藐。說明排序沒有利用索引而發(fā)生了額外排序 ,伴隨著的可能還有Using temporary挑围。

其實(shí)還有其它一些 提示Using MRR、Using index condition 杉辙、Using index for group-by,這些提示是正向的综看,說明sql比較優(yōu)化红碑。

extra

6.其它字段

前面講了5個(gè)比較重要的字段析珊,相信很多求知欲強(qiáng)的小伙伴也想知道其它字段是什么意思忠寻,這里也一并列出來奕剃,以供參考:

字段含義

id查詢語句的序號或者說是標(biāo)識符

select_type表示查詢的類型哑姚,常見的有如下6種

table其值為表名或者表的別名叙量,表示訪問哪一個(gè)表

partitions匹配的分區(qū)

possible_keys表示查詢時(shí)绞佩,可能使用的索引

filtered按表?xiàng)l件過濾的行百分比?越高越好品山,越高表示返回給server層數(shù)據(jù)越準(zhǔn)確肘交,100表示server層無需再過濾涯呻,減少性能消耗

explain字段含義

explain format=json select * from schn_shop_goods order by goods_id;---加上format=json?可得到更詳細(xì)信息入cost成本數(shù)據(jù)等

常見優(yōu)化

深頁查詢

-----后續(xù)具體案例再添加
https://www.mysqlzh.com/doc/64.html---mysql中文參考文檔

https://dev.mysql.com/doc/refman/5.7/en/? ---mysql官網(wǎng)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涝登,一起剝皮案震驚了整個(gè)濱河市胀滚,隨后出現(xiàn)的幾起案子咽笼,更是在濱河造成了極大的恐慌褐荷,老刑警劉巖叛甫,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萌腿,死亡現(xiàn)場離奇詭異抖苦,居然都是意外死亡锌历,警方通過查閱死者的電腦和手機(jī)究西,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門卤材,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事帆精。” “怎么了隘蝎?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵闸溃,是天一觀的道長。 經(jīng)常有香客問我拴测,道長集索,這世上最難降的妖魔是什么务荆? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮盅惜,結(jié)果婚禮上抒寂,老公的妹妹穿的比我還像新娘屈芜。我一直安慰自己沸伏,他們只是感情好毅糟,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迹辐,像睡著了一般明吩。 火紅的嫁衣襯著肌膚如雪印荔。 梳的紋絲不亂的頭發(fā)上仍律,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天善涨,我揣著相機(jī)與錄音,去河邊找鬼娶靡。 笑死姿锭,一個(gè)胖子當(dāng)著我的面吹牛呻此,可吹牛的內(nèi)容都是我干的焚鲜。 我是一名探鬼主播忿磅,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了豪墅?” 一聲冷哼從身側(cè)響起偶器,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后叨粘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年恕曲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了佩谣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吊履。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腾窝,死狀恐怖燕锥,靈堂內(nèi)的尸體忽然破棺而出托慨,到底是詐尸還是另有隱情蕉世,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布谐区,位于F島的核電站昭抒,受9級特大地震影響坤邪,放射性物質(zhì)發(fā)生泄漏婆芦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一喂饥、第九天 我趴在偏房一處隱蔽的房頂上張望消约。 院中可真熱鬧,春花似錦员帮、人聲如沸或粮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氯材。三九已至,卻和暖如春硝岗,著一層夾襖步出監(jiān)牢的瞬間氢哮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工型檀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冗尤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像裂七,于是被迫代替她去往敵國和親皆看。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

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