MySQL 性能優(yōu)化

MYSQL優(yōu)化.png

本文是對于sqlercn在慕課上發(fā)表的“MySQL 性能優(yōu)化”課程的學(xué)習(xí)筆記岗宣,內(nèi)容并非原創(chuàng)。

前言

MYSQL性能優(yōu)化主要包含三種方法:

  1. 查詢優(yōu)化
  2. 表結(jié)構(gòu)優(yōu)化
  3. 系統(tǒng)優(yōu)化
    大部分的性能問題能通過查詢優(yōu)化解決,其次是表結(jié)構(gòu)優(yōu)化譬胎,最后才是系統(tǒng)優(yōu)化育谬。因此查詢優(yōu)化也會占據(jù)大量的篇幅。

查詢優(yōu)化

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

如何開啟慢查詢:

mysql> show variables like 'slow_query_log'
mysql> set global slow_query_log = ON;
mysql> set global slow_query_log_file='D:/download/mysql-8.0.19-winx64/mysql-8.0.19-winx64/mysql-slow.log';
mysql> set global log_queries_not_using_indexes=on;
mysql> set global long_query_time=1;   //超過1s的查詢都會被記入慢查詢?nèi)罩?
TCP Port: 3306, Named Pipe: MySQL
Time                 Id Command    Argument
# Time: 2020-02-15T08:21:23.220194Z
# User@Host: root[root] @ localhost [::1]  Id:    13
# Query_time: 0.001607  Lock_time: 0.000536 Rows_sent: 599  Rows_examined: 599
use sakila;
SET timestamp=1581754883;
select * from customer;

可以使用一些工具來分析慢查詢:
1.mysqldumpslow
2.pt-quary-slow
其中mysqldumpslow是mysql自帶的分析工具鞭执,可以匯總慢查詢記錄并進行排序

mysqldumpslow you-slow-log.log ##對you-slow-log.log進行分析

而pt-quary-slow能分析出更多的統(tǒng)計信息

哪些慢查詢需要引起關(guān)注

  1. 查詢次數(shù)多且用時長
  2. IO大的SQL
  3. 沒有使用索引的SQL

explain

mysql> explain select * from customer ;
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table    | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+
|  1 | SIMPLE      | customer | NULL       | ALL  | NULL          | NULL | NULL    | NULL |  599 |   100.00 | NULL  |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+

table: 顯示這行數(shù)據(jù)是關(guān)于哪張表

type: 顯示連接使用了什么類型司顿,包含:const,eq_reg兄纺,ref大溜,range,index估脆,all
const->當(dāng)MySQL對查詢某部分進行優(yōu)化钦奋,并轉(zhuǎn)換為一個常量時,使用這些類型訪問疙赠。如將主鍵置于where列表中付材,MySQL就能將該查詢轉(zhuǎn)換為一個常量(where上用到唯一索引或默認索引)

select * from table where id  = 1;

eq_reg->類似ref,區(qū)別就在使用的索引是唯一索引圃阳,對于每個索引鍵值厌衔,表中只有一條記錄匹配,簡單來說限佩,就是多表連接中使用primary key或者 unique key作為關(guān)聯(lián)條件
ref->基于索引的查找

select * from table where catalog  = 1;

range->基于索引的范圍查找

select * from table where catalog  > 1;

index->對于索引的掃描

select catalog   from table;

all->全表掃描

select * from table;

possible_keys:可能使用的索引
key:實際使用的索引
key_len:使用索引的長度(理論上越短越好)
ref:列與索引的比較葵诈,表示上述表的連接匹配條件,即哪些列或常量被用于查找索引列上的值
rows:mysql認為必須檢查的用來返回請求的行數(shù)
extra:
using filesort祟同,using temporary作喘。盡量優(yōu)化!

索引優(yōu)化

  1. 在需要索引的地方加上索引晕城,并保證索引能被MYSQL正常使用上
  2. 在滿足使用的情況下泞坦,索引要盡可能的小
  3. 對于聯(lián)合索引,離散度高的索引加在前砖顷,離散度低的加在后
  4. 減少重復(fù)贰锁,冗余和不使用的索引

合適的數(shù)據(jù)類型

  1. 最小的數(shù)據(jù)類型
  2. 最簡單的數(shù)據(jù)類型
  3. 少用null
  4. 少用text,如果要使用滤蝠,將它提出到另一張附加表中

三大范式

  1. 所有列不可拆分
  2. 別的列必須依賴與主鍵而不能只依賴主鍵的一部分
  3. 別的列必須直接依賴主鍵豌熄,而不能間接依賴主鍵

反范式

用一些冗余的數(shù)據(jù)來達到減少查詢開銷的目的,空間換時間

垂直拆分

根據(jù)表的字段進行拆分物咳,比如一個表中字段很多锣险,其中有一部分字段很少被用到,有一部分字段經(jīng)常被用到览闰,還有一部分字段是text或很大的數(shù)據(jù)結(jié)構(gòu)芯肤,那么我們可以將它們根據(jù)這三種特點進行拆分

水平拆分

如果表的數(shù)據(jù)太多,則可以將數(shù)據(jù)分配到多張表中压鉴。使用hash的方法對id進行索引崖咨,同時表可以分為業(yè)務(wù)表和統(tǒng)計表。業(yè)務(wù)表指平時程序調(diào)用的表油吭,對業(yè)務(wù)表采用水平拆分達到性能的提升击蹲,而對統(tǒng)計表署拟,由于被用到的次數(shù)比較少,同時又會設(shè)計到表中大部分的數(shù)據(jù)际邻,因此選擇不對其進行拆分芯丧,避免使用join芍阎。
業(yè)務(wù)表和統(tǒng)計表同時存在世曾,

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市谴咸,隨后出現(xiàn)的幾起案子轮听,更是在濱河造成了極大的恐慌,老刑警劉巖岭佳,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件血巍,死亡現(xiàn)場離奇詭異,居然都是意外死亡珊随,警方通過查閱死者的電腦和手機述寡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叶洞,“玉大人鲫凶,你說我怎么就攤上這事●帽伲” “怎么了螟炫?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長艺晴。 經(jīng)常有香客問我昼钻,道長,這世上最難降的妖魔是什么封寞? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任然评,我火速辦了婚禮,結(jié)果婚禮上狈究,老公的妹妹穿的比我還像新娘碗淌。我一直安慰自己,他們只是感情好谦炒,可當(dāng)我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布贯莺。 她就那樣靜靜地躺著,像睡著了一般宁改。 火紅的嫁衣襯著肌膚如雪缕探。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天还蹲,我揣著相機與錄音爹耗,去河邊找鬼耙考。 笑死,一個胖子當(dāng)著我的面吹牛潭兽,可吹牛的內(nèi)容都是我干的倦始。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼山卦,長吁一口氣:“原來是場噩夢啊……” “哼鞋邑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起账蓉,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤枚碗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后铸本,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肮雨,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年箱玷,在試婚紗的時候發(fā)現(xiàn)自己被綠了怨规。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡锡足,死狀恐怖波丰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舱污,我是刑警寧澤呀舔,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站扩灯,受9級特大地震影響媚赖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜珠插,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一惧磺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捻撑,春花似錦磨隘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至江解,卻和暖如春设预,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背犁河。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工鳖枕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留魄梯,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓宾符,卻偏偏與公主長得像酿秸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子魏烫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,876評論 2 361

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

  • 轉(zhuǎn)自: https://www.bbsmax.com/A/6pdDv0aqJw/ 使用ThinkPHP開發(fā)中MyS...
    WangLu_Work閱讀 294評論 0 2
  • 今天辣苏,數(shù)據(jù)庫的操作越來越成為整個應(yīng)用的性能瓶頸了,這點對于Web應(yīng)用尤其明顯则奥。關(guān)于數(shù)據(jù)庫的性能考润,這并不只是DBA才...
    Java小鋪閱讀 294評論 0 1
  • 原文地址:https://www.cnblogs.com/huchong/p/10219318.html 數(shù)據(jù)庫命...
    meiyou_6652閱讀 494評論 0 0
  • 今天我們課上討論人呀!有一個討論的問題是羅高是一個什么樣的首領(lǐng)與瑞夏德救羅高有什么風(fēng)險读处? 我覺得羅高是一個非常不錯...
    平靖溥媽媽閱讀 518評論 0 0
  • 他是留守兒童,從小父母不在身邊唱矛,他跟著爺爺奶奶長大罚舱。 他雖然頭腦很聰明,但由于是早生兒绎谦,體質(zhì)偏弱管闷,個頭小,而且身材...
    雪蓮靜語閱讀 221評論 0 2