MySQL第11天:MySQL索引优化分析之性能分析
??????????????????? MySQL索引優化分析之性能分析
一、MySQL Query Optimizer
二、MySQL常見瓶頸
三、Explain(執行計劃)
???????? 1、什么是執行計劃?
???????? 2、執行計劃能干什么?
???????? 3、執行計劃怎么使用?
???????? 4、執行計劃中各字段解釋
--------------------------------------------------------------------------------------------
一、MySQL Query Optimizer
二、MySQL常見瓶頸?
?
三、Explain(執行計劃)
1、什么是執行計劃?
???????? 使用Explain關鍵字可以模擬優化器執行SQL查詢語句,從而知道MySQL如何處理你的SQL語句。分析你的查詢語句或是表結構的性能瓶頸。
2、執行計劃能干什么?
(1)表的讀取順序 (2)數據讀取操作的操作類型 (3)哪些索引可以使用 (4)哪些索引被實際使用 (5)表之間的引用 (6)每張表有多少行被優化器查詢PS:(1)select_type:數據讀取操作的操作類型(2)possible_keys:哪些索引可以使用(3)key:哪些索引被實際使用(4)rows:每張表有多少行被優化器查詢(rows越少越好)?
3、執行計劃怎么使用?
????? 1)Explain+SQL語句
????? 2)執行計劃包含的信息
4、執行計劃中各字段解釋
字段1:id:
1)select查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序。
2)三種情況:
第一種情況id相同:執行順序由上而下;
第二種情況id不同:如果是子查詢,id的序號會遞增,id值越大優先級越高,越先被執行
第三種情況id相同和不同,同時存在?
?
字段2:select_type
字段3:table
顯示這一行的數據是關于哪張表的
字段4:type
?
?
字段5:possible_keys
理論上用到的索引。
字段6:key
實際用到的索引。
字段7:key_len
?
字段8:ref
字段9:rows
字段10:extra
extra:包含不適合在其他列中顯示但十分重要的額外信息。常見的有: (1)using filesort (2)using temporary (3)using index (4)using where (5)using join buffer (6)impossible where (7)select tables optimized away (8)distinct?
PS:Using temporary:使用了臨時表保存中間結果,MySQL在對查詢結果排序時使用臨時表,常見于排序order by和分組查詢group by。
1、Using? filesort
2、Using temporary
?
?PS:group by盡量根據索引的個數和順序來,否則會產生文件列排序和臨時表(using filesort、using temorary),影響查詢性能。
3、Using? index
4、using join buffer
使用了鏈接緩存
5、impossible where
where子句的值總是false,不能用來獲取任何元組
6、impossible where
7、select tables optimized away
8、distinct
?
?
總結
以上是生活随笔為你收集整理的MySQL第11天:MySQL索引优化分析之性能分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL第10天:MySQL索引优化分
- 下一篇: MySQL第12天:MySQL索引优化分