MySQL的維護語句

2021-05-25 14:59:40 字數 2931 閱讀 1003

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中會採用什麼計算方式呢?我回家後試一試。

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

mysql表維護語句 Mysql維護語句

mysql的optimizer 優化元件 在優化sql語句時,首先需要收集一些相關資訊,其中就包括表的cardinality 可以翻譯為 雜湊程度 它表示某個索引對應的列包含多少個不同的值 如果cardinality大大少於資料的實際雜湊程度,那麼索引就基本失效了。我們可以使用show index語...

Mysql的維護語句

analyze table mysql 的optimizer 優化元件 在優化sql語句時,首先需要收集一些相關資訊,其中就包括表的cardinality 可以翻譯為 雜湊程度 它表示某個索引對應的列包含多少個不同的值 如果cardinality大大少於資料的實際雜湊程度,那麼索引就基本失效了。我們...

轉)MySQL的維護語句

analyze table mysql的optimizer 優化元件 在優化sql語句時,首先需要收集一些相關資訊,其中就包括表的cardinality 可以翻譯為 雜湊程度 它表示某個索引對應的列包含多少個不同的值 如果cardinality大大少於資料的實際雜湊程度,那麼索引就基本失效了。我們可...