眾所周知,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...