mysql慢查詢優化

2022-06-19 23:03:09 字數 1074 閱讀 8180

一、什麼是慢查詢 

mysql的慢查詢,全名是慢查詢日誌,是mysql提供的一種日誌記錄,用來記錄在mysql中響應時間超過閥值的語句。具體環境中,執行時間超過long_query_time值的sql語句,則會被記錄到慢查詢日誌中。簡單的說就是執行很長時間的sql語句。

二、怎麼優化

1、索引沒起作用的情況

1.1 使用like關鍵字的查詢語句在使用like關鍵字進行查詢的查詢語句中,如果匹配字串的第乙個字元為「%」,索引不會起作用。只有「%」不在第乙個位置索引才會起作用。

1.2 使用多列索引的查詢語句mysql可以為多個字段建立索引。乙個索引最多可以包括16個字段。對於多列索引,只有查詢條件使用了這些欄位中的第乙個欄位時,索引才會被使用。

2、優化資料庫結構

合理的資料庫結構不僅可以使資料庫占用更小的磁碟空間,而且能夠使查詢速度更快。資料庫結構的設計,需要考慮資料冗餘、查詢和更新的速度、欄位的資料型別是否合理等多方面的內容。

2.1. 將字段很多的表分解成多個表 

對於字段比較多的表,如果有些欄位的使用頻率很低,可以將這些字段分離出來形成新錶。因為當乙個表的資料量很大時,會由於使用頻率低的字段的存在而變慢。

2.2. 增加中間表

對於需要經常聯合查詢的表,可以建立中間表以提高查詢效率。通過建立中間表,把需要經常聯合查詢的資料插入到中間表中,然後將原來的聯合查詢改為對中間表的查詢,以此來提高查詢效率。

3、分解關聯查詢

將乙個大的查詢分解為多個小查詢是很有必要的。

很多高效能的應用都會對關聯查詢進行分解,就是可以對每乙個表進行一次單錶查詢,然後將查詢結果在應用程式中進行關聯,很多場景下這樣會更高效。

4、inner join替代left join /right join

inner join中的兩張表,如: a inner join b,但實際執行的順序是跟寫法的順序沒有半毛錢關係的,最終執行也可能會是b連線a,順序不是固定死的。如果on條件欄位有索引的情況下,同樣可以使用上索引。讓mysql自己去判斷(查詢優化器)。具體表的連線順序和使用索引情況,mysql查詢優化器會對每種情況做出成本評估,最終選擇最優的那個做為執行計畫。

參考:

Mysql優化 慢查詢

先查詢是否開啟 開啟慢查詢日誌 set global slow query log 1 檢視引數設定 show variables like long query time 這裡查詢的是查過多少時間才會記錄成慢查詢 預設10 秒以上的s ql語句記錄到日誌中 修改引數 set global long...

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...