MySQL中的表分析

2021-09-18 01:16:34 字數 1601 閱讀 5878

眾所周知,oracle中,對於大量增刪改操作的表需要定時進行表分析,以便**被標記廢棄的磁碟空間,縮減表的實際大小。對於異常狀態的索引,也需要定時對索引進行重構。

mysql中亦有類似需求。實現的命令有如下這些:analyze、optimize、check、repair。

第一步:show index

通過命令,我們可以看到索引相關資訊,同時可以通過對比這裡的cardinality的值與表中索引列的行數以便確定是否存在索引異常,這裡我們假設索引產生異常。那麼執行分析命令。

第二步:analyze

語法如下

一般來說,執行完analyze之後,再次執行show index命令,會發現cardinality會有明顯的變化,這說明執行成功了。

對於頻繁增刪改操作的表,會在磁碟上產生大量的被標記不可用的空間,但這部分空間不能寫入新資料,同時記錄於其上的資料一步可用。這就會產生碎片,造成磁碟的浪費,降低io效率。我們要收回這部分空間,可以這麼做

第一步:直接執行命令

如上圖第二行所示,說明執行已成功。

具體效果,可以通過比對執行命令前後的表空間檔案的大小得到。這裡就不做示範了。

當mysql資料庫異常關閉或表異常關閉,或寫入磁碟發生錯誤的時候,抑或索引同步失效,需要用到下面這個命令

check,語法如下

當被檢查物件正確的情況下會顯示如上圖的效果,否則效果如下圖所示

四、repair

這個功能,innodb不支援,而且在mysql8.0以後,innodb已是主流並將逐漸取代myisam引擎,因此暫不對此功能做詳細說明。

補充:1:若開啟了binlog,那麼在analyze的過程亦會寫入日誌。若不打算寫入日誌,命令中加入「local」即可,如下

analyze local table ***。

2:analyze的時候,mysql會用乙個讀取鎖鎖定目標表。因此最好將這個工作放到業務量低的時間進行。

3:對於check命令,還有以下的可選項

upgrade:用來測試在更早版本的mysql中建立的表是否與當前版本相容。

quick:速度最快的選項,在檢查各列的資料時,不會檢查鏈結(link)的正確與否,如果沒有遇到什麼問題,可以使用這個選項。

fast:只檢查表是否正常關閉,如果在系統掉電之後沒有遇到嚴重問題,可以使用這個選項。

changed:只檢查上次檢查時間之後更新的資料。

medium:預設的選項,會檢查索引檔案和資料檔案之間的鏈結正確性。

extended:最慢的選項,會進行全面的檢查。

Mysql分析 檢查 優化表 分析表

1.分析表 對錶進行分析 分析關鍵字的分布,分析儲存myisam等表中鍵的分布 mysql中使用analyze table語句來分析表,該語句的基本語法如下 mysql analyze table 表名1 表名2 使用analyze table分析表的過程中,資料庫系統會對錶加乙個唯讀鎖。在分析期間...

mysql中的表分割槽 mysql中的表分割槽

表分割槽為海量資料的儲存提供了一種更有效率的儲存方式,可通過分割槽將表的資料分開儲存在不同的磁碟上,提高資料檢索和操作的效率。在sql server中進行表分割槽操作,包括三個步驟 建立分割槽函式 create partition function fn partition datetime as ...

mysql 鎖表機制分析

412 views posted in 2010年08月30日 10 00h.scofield 為了給高併發情況下的mysql進行更好的優化,有必要了解一下mysql查詢更新時的鎖表機制。一 概述 mysql有三種鎖的級別 頁級 表級 行級。myisam和memory儲存引擎採用的是表級鎖 tabl...