MySQL的維護語句

來源:互聯網
上載者:User

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
取消寫入。

 

 

所以這個Cardinality會有如下的含義:

1. 列值代表的是此列中儲存的唯一值的個數(如果此列為primary key 則值為記錄的行數)
2. 列值只是個估計值,並不準確。
3. 列值不會自動更新


,需要通過Analyze table來更新一張表或者mysqlcheck -Aa來進行更新整個資料庫。
4. 列值的大小影響Join時是否選用這個Index的判斷。
5. 建立Index時,MyISAM的表Cardinality的值為null,InnoDB的表Cardinality的值大概為行數。

6. MyISAM與InnoDB對於Cardinality的計算方式不同。

InnoDB

中會採用什麼計算方式呢?我回家後試一試。

這篇文章介紹很詳細:

http://www.mysqlperformanceblog.com/2008/09/03/analyze-myisam-vs-innodb

/

 

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。

 

 

表索引異常,修複msql表索引(表引擎:myisam


)

myisamchk --safe-recover /usr/local/mysql/data/ename_news/dede_arccache

repair table customerquestion;

Error infos: Table './ename_news/dede_arccache' is marked as crashed and should be repaired
myisamchk -r data/ename_news/dede_arccache

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.