Mysql優化 慢查詢

2021-08-18 23:33:44 字數 3676 閱讀 7779

先查詢是否開啟:

開啟慢查詢日誌:

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 索引沒起作用的...