10、MySQL的SQL優化之定位SQL的問題 - 系統的擼一遍MySQL

找出SQL慢的緣由

談到MySQL不得不說的就是你們都會遇到的性能問題,今天就記錄一下SQL優化相關的技巧。php

檢查MySQL狀態

經過檢查SQL語句的狀態有助於MySQL的優化,首先介紹 show status命令sql

//檢查當前會話的狀態
SHOW SESSION STATUS;
//檢查全局狀態
SHOW GLOBAL STATUS;

這個命令能夠查看到MySQL中sql語句的執行狀態,具體的以下:json

參數 說明
Com_select SELECT查詢次數
Com_insert INSERT操做次數
Com_update update更新次數
Com_delete delete操做次數

innodb_rows_read性能

innodb_rows_inserted優化

innodb_rows_updatedspa

innodb_rows_deletedcode

select查詢返回行數orm

update、insert、delete操做次數索引

Connections MySQL累計鏈接次數
Slow_queries 慢查詢次數
Handler_read_key 索引查詢數
Handler_read_rnd_next 讀取下一行的次數

經過以上的數據,能夠檢查出MySQL鏈接數量,決定是否使用連接池,索引利用率。ci

根據讀寫情況,能夠了解到選擇什麼樣的存儲引擎更加合適。

分析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對條件的優化,恆等條件的優化等信息,便於查詢出性能瓶頸。

相關文章
相關標籤/搜索