前言:
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 $$