查詢Mysql未使用的索引

2021-07-08 22:41:19 字數 1073 閱讀 2345

在mysql中如何找出未使用或使用次數很少的索引,這樣文章比較多,但很少文章提到用這些方法存在的風險。

這篇文章主要記錄,我對如何找未使用索引的理解及風險(目前還未找到理想方法),能像oracle儲存執行計畫,根據執行計畫(v$sql_plan)來判斷索引使用情況是比較安全。當然oracle的index monitor特性類似percona的userstat有比較大的風險。

以下四個工具(方法)是在mysql找未使用索引比較方便,但都存在一定風險

1、mysqlidxchx

2、pt-index-usage

3、userstat

4、check-unused-keys

1、mysqlidxchx工具很長時間沒有更新,但主要用來分析general log、slow.log,來判斷例項中那個索引是可以刪除,但這個工具沒有經過實戰,風險很大。

2、pt-index-usage原理來類似mysqlidxchx,執行過程中效能消耗比較嚴重,如果要在生產庫上部署,最好在凌晨業務低鋒時使用,pt-index-usage只支援slow.log格式的檔案,如果要全面分析整個例項索引使用情況,需要long_query_time設定成0,才能把所以的sql記錄下來,但同時會對磁碟空間造成壓力,同時pt-index-usage對大檔案分析就是件痛苦的事。當然pt-index-usage可以考慮部分表索引使用情況的確認。

3、最看好的userstat,收集資訊效能優越,成本低。這個patch是google貢獻的(userstat_running),percona把它改名成userstat,預設是不開啟的,開啟是會收集客戶端、索引、表、執行緒資訊儲存在client_statistics、index_statistics、table_statistics、thread_statistics。userstat的bug導致的問題太嚴重,直接導致mysql crash,到目前**生產環境還沒有使用。

4、ryan lowe的check-unused-keys指令碼基於userstat,能夠比較方便輸出需要刪除的索引。

小結:mysql能把每條sql執行計畫儲存在效能檢視中,寫入效能檢視成本是非常小,使用者可以根據執行計畫來判斷索引使用情況,分析執行計畫突變的監控。

**:

MySQL查詢冗餘索引和未使用過的索引

mysql5.7及以上版本提供直接查詢冗餘索引 重複索引和未使用過索引的檢視,直接查詢即可。查詢冗餘索引 重複索引 select from sys.schema redundant indexes 查詢未使用過的索引 select from sys.schema unused indexes 如果想...

資料庫時間型別查詢未使用索引

由於業務需求,目前需要在資料庫中根據時間查詢資料,資料庫內欄位型別為datetime 在sql中採用的是 date sub函式獲取時間 date sub now interval 30 day date sub now interval 30 day 獲取的時間是varchar型別,無法使用到索引,...

MySQL查詢不使用索引彙總

mysql查詢不使用索引彙總 眾所周知,增加索引是提高查詢速度的有效途徑,但是很多時候,即使增加了索引,查詢仍然不使用索引,這種情況嚴重影響效能,這裡就簡單總結幾條mysql不使用索引的情況 如果mysql估計使用索引比全表掃瞄更慢,則不使用索引。例如,如果列key均勻分布在1和100之間,下面的查...