天天看點

explain 分析 :MySQL優化之慢查詢的定位及優化-SQL優化必備

前言:

explain,慢查詢優化機制是整個sql優化的基本技能,是以掌握explain非常有必要,本篇博文就是要介紹一下explain

一、SQL語句優化的一般步驟:

(1)通過 show status 指令了解各種 SQL 的執行效率;

(2)定位執行效率較低的 SQL 語句(重點是 Select);

(3)通過 explain 分析低效率的 SQL 語句的執行情況;

(4)确實問題并采取相應的優化措施;

二、優化

1、show status 指令

格式: show [session | global] status like …

如果不寫[session | global],預設的是session,即取出目前回話的執行情況;

show status like "uptime"  //查詢MySql啟動的時間;

show status like "com_select" //查詢MySql的查詢次數

show status like "com_insert" //查詢MySql的插入次數

show status like "com_update" //查詢MySql的更新次數

show status like "com_delete" //查詢MySql的删除次數
           

如果想查詢所有的(即MySql啟動到現在的資訊), 則增加 global 參數;

show global status like "uptime"  //查詢MySql啟動的時間;
show global status like "com_select" //查詢MySql的查詢次數
show global status like "com_insert" //查詢MySql的插入次數
show global status like "com_update" //查詢MySql的更新次數
show global status like "com_delete" //查詢MySql的删除次數 
show global status like "connections" //查詢MySQL的連接配接數
show global status like "slow_queries" //擷取慢查詢的次數
           

2、如何檢視和修改慢查詢的時間?

預設情況下,MySql認為超過 10 秒才是一個慢查詢;

(1)顯示目前慢查詢設定的時間:show variables like “long_query_time” ;

(2)修改慢查詢的設定時間為1秒:set long_query_time=1

這時如果出現一條語句執行時間超過 1 秒, 就會統計到

show global status like "slow_queries"

查詢的結果中;

3、如何把慢查詢的 sql 記錄到日志中?

預設的情況下,mysql不會記錄慢查詢的 sql 日志;

慢查詢的啟動:傳送門

慢查詢的啟動及慢查詢日志分析:傳送門

擴充知識

(1)一般情況下,分号作為指令結束符;在寫的存儲過程或函數中也有分号,如果不将指令結束符修改,則會使存儲過程或函數提前結束;是以為了存儲過程或函數能夠正常執行,我們需要修改指令結束符。

delimiter $$
           

(2)删除自定義函數 rand_string

drop function rand_string $$
           
explain 分析 :MySQL優化之慢查詢的定位及優化-SQL優化必備

繼續閱讀