mysql问题定位_十、MySQL的SQL优化之定位SQL的问题 - 系统的撸一遍MySQL
找出SQL慢的原因
談到MySQL不得不說的就是大家都會遇到的性能問題,今天就記錄一下SQL優化相關的技巧。
檢查MySQL狀態
通過檢查SQL語句的狀態有助于MySQL的優化,首先介紹 show status命令
//檢查當前會話的狀態
SHOW SESSION STATUS;
//檢查全局狀態
SHOW GLOBAL STATUS;
這個命令可以查看到MySQL中sql語句的執行狀態,具體的如下:
參數
說明
Com_select
SELECT查詢次數
Com_insert
INSERT操作次數
Com_update
update更新次數
Com_delete
delete操作次數
innodb_rows_read
innodb_rows_inserted
innodb_rows_updated
innodb_rows_deleted
select查詢返回行數
update、insert、delete操作次數
Connections
MySQL累計連接次數
Slow_queries
慢查詢次數
Handler_read_key
索引查詢數
Handler_read_rnd_next
讀取下一行的次數
通過以上的數據,可以檢查出MySQL連接數量,決定是否使用鏈接池,索引利用率。
根據讀寫狀況,可以了解到選擇什么樣的存儲引擎更加合適。
分析SQL的執行計劃
相信大家都不陌生多explain命令,用于檢查SQL語句的執行計劃,在索引優化的時候必不可少。
每次項目前都會開著SlowLog去壓測,然后把滿查詢通過explain去分析。
首先介紹一下這個命令的常用用法:
//檢查SQL語句執行計劃
explain select * from user where username = 'fuckphp';
//查詢MySQL優化后但語句執行計劃
explain extended select * from user where username = 'fuckphp';
//查詢MySQL分區信息的執行計劃
explain partitions select * from user where username = 'fuckphp';
字段
描述
id
每個SELECT分配的ID
select_type
類型
說明
SIMPLE
簡單表,不包含字查詢或聯表查詢
PRIMARY
主查詢,最外層的查詢
UNION
union查詢中后面的查詢語句
SUBQUERY
字查詢的第一個語句
table
表名
type
類型
說明
ALL
全表掃描
index
全索引掃描
range
索引范圍掃描(大于小于之類的查詢)
ref
非唯一或主鍵索引的等值查詢
eq_ref
使用唯一或主鍵的查詢
const
const:只有一個匹配行使用了唯一或主鍵查詢
possible_keys
可能用到的索引
key
查詢用到的索引
key_len
索引長度
rows
檢索行數
Extra
補充信息
ref
與key一同檢索的字段或常數
通過show profile分析SQL
除了explain還有show profile這個神器,來幫我們分析SQL語句的執行過程。
//查看是否支持
show @@have_profiling;
//在會話中開啟profile
set profiling=1;
//查詢當前會話執行過的SQL 包含queryid 查詢時間、查詢語句
show profiles;
//根據queryid查詢執行過程中的時間
show profile for query queryid;
//查詢全部執行信息
show profile all for query queryid;
//查詢source、cpu、block io、context、page faults等信息 更多查看help profile;
show profile cpu for query queryid;
這個神器會在未來版本中被MySQL廢除掉,已經不建議使用,官方建議在performance_schema的PROFILING表中進行查詢。
SQL的追蹤
MySQL5.6以后,可以使用strace命令對SQL語句進行追蹤。
//開啟strace
SET OPTIMIZER_TRACE="enabled=on";
//設置strace 輸出格式為json
SET END_MARKERS_IN_JSON=on;
//查詢SQL信息
select * from information_schema.OPTIMIZER_TRACE\G
在這個結果中可以查看到MySQL對條件的優化,恒等條件的優化等信息,便于查詢出性能瓶頸。
總結
以上是生活随笔為你收集整理的mysql问题定位_十、MySQL的SQL优化之定位SQL的问题 - 系统的撸一遍MySQL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谷歌和亚马逊等科技巨头增长乏力,分析师称
- 下一篇: excel怎么设置分页打印排版?(长图片