Mysql

刪除未使用的索引 MariaDB

  • March 4, 2021

我有一個包含 50 個表的大型數據庫,每個表可以包含 100,000 到 1 億條記錄。在這些表上有 1000 個索引,但許多索引現在都沒有使用。

如何找到這些索引並刪除它們?

我是 MariaDB 和 MySQL 的初學者,所以對於答案,如果你能提到研究這個的資源,那就太好了。

參考https://mariadb.com/kb/en/user-statistics/

MariaDB 的一個可選功能收集有關索引(以及表、使用者和客戶端)使用情況的統計資訊。

如果您啟用userstat外掛(請參閱文件連結),它會記錄通過每個給定索引讀取的行的計數器。如果對於給定索引,該數字仍然為 0,那麼它沒有被任何查詢使用。

請記住,當 MariaDB 伺服器重新啟動時,這些計數器會重置為 0,因此您不知道在此之前是否使用了索引。

由於您的問題更像是一個研究問題而不是“如何”,另請參閱:

  • MySQL 8.0INVISIBLE開啟索引。這部分地將比爾提到的兩件事放在了一起,但仍然無法完全安全地發現未使用的索引。
  • https://jira.mariadb.org/browse/MDEV-7317 - MariaDB 的實施INVISIBLE(或IGNORE)建議。

INVISIBLE讓您對優化器隱藏索引——然後,如果像比爾的軼事中那樣,意識到您需要它,您就不必再重新添加它。

引用自:https://dba.stackexchange.com/questions/286306