天天看點

mysql優化Analyze Table

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'; 

結果是

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。