http://blog.csdn.net/alongken2005/article/details/6394016 數據庫
Analyze Table
MySQL 的Optimizer(優化元件)在優化SQL語句時,首先須要收集一些相關信息,其中就包括表的cardinality(能夠翻譯爲「散列程度」),它表示某個索引對應的列包含多少個不一樣的值——若是cardinality大大少於數據的實際散列程度,那麼索引就基本失效了。
咱們可使用SHOW INDEX語句來查看索引的散列程度:
SHOW INDEX FROM PLAYERS;
TABLE KEY_NAME COLUMN_NAME CARDINALITY
------- -------- ----------- -----------
PLAYERS PRIMARY PLAYERNO 14
由於此時PLAYER表中不一樣的PLAYERNO數量遠遠多於14,索引基本失效。
下面咱們經過Analyze Table語句來修復索引:
ANALYZE TABLE PLAYERS;
SHOW INDEX FROM PLAYERS;
結果是:
TABLE KEY_NAME COLUMN_NAME CARDINALITY
------- -------- ----------- -----------
PLAYERS PRIMARY PLAYERNO 1000
此時索引已經修復,查詢效率大大提升。
須要注意的是,若是開啓了binlog,那麼Analyze Table的結果也會寫入binlog,咱們能夠在analyze和table之間添加關鍵字local取消寫入。
Checksum Table
數據在傳輸時,可能會發生變化,也有可能由於其它緣由損壞,爲了保證數據的一致,咱們能夠計算checksum(校驗值)。
使用MyISAM引擎的表會把checksum存儲起來,稱爲live checksum,當數據發生變化時,checksum會相應變化。
在執行Checksum Table時,能夠在最後指定選項qiuck或是extended;quick表示返回存儲的checksum值,而extended會從新計算checksum,若是沒有指定選項,則默認使用extended。
Optimize Table
常常更新數據的磁盤須要整理碎片,數據庫也是這樣,Optimize Table語句對MyISAM和InnoDB類型的表都有效。
若是表常常更新,就應當按期運行Optimize Table語句,保證效率。
與Analyze Table同樣,Optimize Table也可使用local來取消寫入binlog。
Check Table
數據庫常常可能遇到錯誤,譬如數據寫入磁盤時發生錯誤,或是索引沒有同步更新,或是數據庫未關閉MySQL就中止了。
遇到這些狀況,數據就可能發生錯誤:
Incorrect key file for table: ' '. Try to repair it.
此時,咱們可使用Check Table語句來檢查表及其對應的索引。
譬如咱們運行
CHECK TABLE PLAYERS;
結果是
TABLE OP MSG_TYPE MSG_TEXT
-------------- ----- -------- --------
TENNIS.PLAYERS check status OK
MySQL會保存表最近一次檢查的時間,每次運行check table都會存儲這些信息:
執行
SELECT TABLE_NAME, CHECK_TIME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'PLAYERS'
AND TABLE_SCHEMA = 'TENNIS'; /*TENNIS是數據庫名*/
結果是
TABLE_NAME CHECK_TIME
---------- -------------------
PLAYERS 2006-08-21 16:44:25
Check Table還能夠指定其它選項:
UPGRADE:用來測試在更早版本的MySQL中創建的表是否與當前版本兼容。
QUICK:速度最快的選項,在檢查各列的數據時,不會檢查連接(link)的正確與否,若是沒有遇到什麼問題,可使用這個選項。
FAST:只檢查表是否正常關閉,若是在系統掉電以後沒有遇到嚴重問題,可使用這個選項。
CHANGED:只檢查上次檢查時間以後更新的數據。
MEDIUM:默認的選項,會檢查索引文件和數據文件之間的連接正確性。
EXTENDED:最慢的選項,會進行全面的檢查。
Repair Table
用於修復表,只對MyISAM和ARCHIVE類型的表有效。
這條語句一樣能夠指定選項:
QUICK:最快的選項,只修復索引樹。
EXTENDED:最慢的選項,須要逐行重建索引。
USE_FRM:只有當MYI文件丟失時才使用這個選項,全面重建整個索引。
與Analyze Table同樣,Repair Table也可使用local來取消寫入binlog。測試