在專案使用mysql過程中,隨著系統的執行,發現一些慢查詢,在這裡總結一下mysql索引優化步驟
1.開發過程優化
開發過程中對業務表中查詢sql分析sql執行計畫(尤其是業務流水表),主要是檢視sql執行計畫,對sql進行優化。
explain執行計畫關鍵屬性
select_type,possible_keys,key,rows
select_type 訪問型別
system>const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all
system:表只有一行記錄(等於系統表)
eq_ref:唯一性索引掃瞄,對於每個索引鍵,表中只有一條記錄與之匹配。常見於主鍵 或 唯一索引掃瞄。
const:表示通過索引一次就找到了,const用於比較primary key 或者 unique索引。因為只需匹配一行資料,所有很快。如果將主鍵置於where列表中,mysql就能將該查詢轉換為乙個const
效能最好的是const,最差的是all
**一般來說,得保證查詢至少達到range級別,最好能達到ref **
possible_keys
查詢涉及到的字段上存在索引,則該索引將被列出,但不一定被查詢實際使用.
顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從where語句中選擇乙個合適的語句
key實際使用的索引,如果為null,則沒有使用索引(這條很關鍵)。
很少的情況下,mysql會選擇優化不足的索引。這種情況下,可以在select語句中使用use force index(indexname)來強制使用乙個索引或者用ignore index(indexname)來強制mysql忽略索引
rows
根據表統計資訊及索引選用情況,大致估算出找到所需的記錄所需要讀取的行數,越小越好.
extra
關於mysql如何解析查詢的額外資訊。看到的壞的例子是using temporary和using filesort,意思mysql根本不能使用索引,結果是檢索會很慢.
2.上線前提交dba審核(流程)
對於關鍵系統上線前需要把資料表結構和索引提交dba審核(防止出現沒有索引)。
3.持續優化
部分業務表上線時由於資料量很小不會產生慢查詢問題,或者上線後隨著業務需求變化,可能會產生慢查詢問題。
需要持續優化,可以自己查詢sql日誌,找出慢查詢,關注dba發的慢查詢sql(一般力度比較粗,一般只有執行時間,沒有執行頻次),
對於執行頻次比較多sql慢查詢的標準(執行時間)一般會要求更高。
借助自動化運維工具,統計sql執行時間和頻率來區分慢查詢,比如報表服務執行超過1s為慢查詢,而乙個執行比較頻繁的sql(2c業務)超過50ms就定義為慢查詢.
mysql 雜湊索引 MySQL索引之雜湊索引
雜湊索引 hash index 建立在雜湊表的基礎上,它只對使用了索引中的每一列的精確查詢有用。對於每一行,儲存引擎計算出了被索引的雜湊碼 hash code 它是乙個較小的值,並且有可能和其他行的雜湊碼不同。它把雜湊碼儲存在索引中,並且儲存了乙個指向雜湊表中的每一行的指標。在mysql中,只有me...
mysql主鍵索引 MySQL索引之主鍵索引
在mysql裡,主鍵索引和輔助索引分別是什麼意思,有什麼區別?上次的分享我們介紹了聚集索引和非聚集索引的區別,本次我們繼續介紹主鍵索引和輔助索引的區別。1 主鍵索引 主鍵索引,簡稱主鍵,原文是primary key,由乙個或多個列組成,用於唯一性標識資料表中的某一條記錄。乙個表可以沒有主鍵,但最多只...
mysql聚集索引 MySQL索引之聚集索引介紹
在mysql裡,聚集索引和非聚集索引分別是什麼意思,有什麼區別?在mysql中,innodb引擎表是 聚集 索引組織表 clustered index organize table 而myisam引擎表則是堆組織表 heap organize table 也有人把聚集索引稱為聚簇索引。當然了,聚集索...