先查詢是否開啟:
開啟慢查詢日誌:
set global slow_query_log=1;
檢視引數設定:
show variables like 'long_query_time'; //這裡查詢的是查過多少時間才會記錄成慢查詢
預設10
秒以上的s
ql語句記錄到日誌中
修改引數:
set global long_query_time=0.1;
滿足0.
1秒查詢時間的s
ql語句就記錄
修改之後不能直接看到修改後的值,如下圖
所以,我們需要新開啟乙個視窗去檢視
開啟系統變數
log-queries-not-using-indexes:未使用索引的查詢也被記錄到慢查詢日誌中(可選項)。如果調優的話,建議開啟這個選項。
當我們把所有的都開啟之後,它就會把所有超過我們剛剛設定的閾值的sql語句記錄在我們設定的慢查詢裡
接下來,我們將針對當前的sql語句進行分析
分析語句慢的原因:
我們開啟了慢查詢去記錄一些執行時間比較久的
sql語句,找出這些sql語句並不意味著完事了,
再通過explain
或者pro
file
s來分析語句
0:檢視profile是否開啟
然後再通過
1)show profiles;
這個命令是顯示當前所有連線的工作狀態.
2)檢視單條語句執行過程
show profile for query 5;
這裡的5指的就是 query_id,意思是你想分析哪條sql語句
什麼情況下產生臨時表?
1: group by 的列和order by 的列不同時, 2表邊查時,取a表的內容,group/order by另外表的列
2: distinct 和 order by 一起使用時
3: 開啟了 sql_small_result 選項
什麼情況下臨時表寫到磁碟上?
答:1:取出的列含有text/blob型別時 ---記憶體表儲存不了text/blob型別
2:在group by 或distinct的列中存在》512位元組的string列
3:select 中含有》512位元組的string列,同時又使用了union或union all語句
少用子查詢
少使用group by
在日常工作中,有
些時我們常常用到explain這個命令來檢視乙個這些sql語句的執行計畫,檢視該sql語句有沒有使用上了索引,有沒有做全表掃瞄,這都可以通過explain命令來檢視。
explain顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的查詢語句。
explain的列分析
id: 代表select 語句的編號, 如果是連線查詢,表之間是平等關係, select 編號都是1,從1開始. 如果某select中有子查詢,則編號遞增.
type列: 是指查詢的方式, 非常重要,是分析
」查資料過程
」的重要依據(
從上往下效能越來越好
)可能的值
all: 意味著從表的第1行,往後,逐行做全表掃瞄.,運氣不好掃瞄到最後一行.
index: 比all效能稍好一點,
通俗的說: all 掃瞄所有的資料行,相當於data_all index 掃瞄所有的索引節點,相當於index_all
range: 意思是查詢時,能根據索引做範圍的掃瞄
ref 意思是指 通過索引列,可以直接引用到某些資料行
eq_ref 是指,通過索引列,直接引用某1行資料, 常見於連線查詢中
const, system, null 這3個分別指查詢優化到常量級別, 甚至不需要查詢時間.
一般按照主鍵來查詢時,易出現const,system
或者直接查詢某個表示式,不經過表時, 出現null
max,min在表中優化過,不需要\真正查詢,為null 所以type為null
ref列 指連線查詢時, 表之間的字段引用關係.
顯示使用哪個列或常數與
key一起從表中選擇行。
rows : 是指估計要掃瞄多少行.
extra:
using index: 是指用到了索引覆蓋,效率非常高
using where 是指光靠索引定位不了,還得where判斷一下
using temporary 是指用上了臨時表, group by 與order by 不同列時,或group by ,order by 別的表的列.
using filesort : 檔案排序(檔案可能在磁碟,也可能在記憶體),
select tables optimized away 這個值意味著僅通過使用索引,優化器可能僅從聚合函式結果中返回一行
select sum(shop_price) from goods group by cat_id( 這句話,用到了臨時表和檔案排序)
type列: 是指查詢的方式, 非常重要,是分析」查資料過程」的重要依據
可能的值
all: 意味著從表的第1行,往後,逐行做全表掃瞄.,運氣不好掃瞄到最後一行.
擴充套件
Mysql慢查詢優化
二 優化這些慢查詢 3.細節優化 一般的應用系統,讀寫比例在10 1左右,而且插入操作和一般的更新操作很少出現效能問題,遇到最多的,也是最容易出問題的,還是一些複雜的查詢操作 修改配置檔案 在 my.ini 增加幾行 slow query log on log slow queries 儲存路徑 l...
Mysql 慢查詢優化
mysql 慢查詢的相關引數 使用show variables來查詢,set global來設定 slow query log 是否開啟慢查詢日誌,1表示開啟,0表示關閉。slow query log file mysql資料庫慢查詢日誌儲存路徑。可以不設定該引數,系統則會預設給乙個預設的檔案hos...
mysql慢查詢優化
一 什麼是慢查詢 mysql的慢查詢,全名是慢查詢日誌,是mysql提供的一種日誌記錄,用來記錄在mysql中響應時間超過閥值的語句。具體環境中,執行時間超過long query time值的sql語句,則會被記錄到慢查詢日誌中。簡單的說就是執行很長時間的sql語句。二 怎麼優化 1 索引沒起作用的...