13.5.2.3. check table語法
check table tbl_name [, tbl_name] ... [option] ...
option=
檢查乙個或多個表是否有錯誤。check table對myisam和innodb表有作用。對於myisam表,關鍵字統計資料被更新。
check table也可以檢查檢視是否有錯誤,比如在檢視定義中被引用的表已不存在。
check table語句會返回乙個含有以下列的表:列值
table
表名稱op
進行檢查
msg_type
狀態、錯誤、資訊或錯誤之一
msg_text
訊息注意,該語句可能會為每個被檢查的表產生多行資訊。最後一行有乙個msg_type狀態值。msg_text通常應為ok。如果您沒有得到ok,或表已經更新了,則您通常應該執行修復後的表。請參見5.9.4節,「表維護和崩潰恢復」。表已經更新了,這意味著表的儲存引擎指示沒有必要檢查表。
可以給予的不同的檢查選項列於下表中。這些選項只適用於檢查myisam表。對於innodb表和檢視,這些選項被忽略。
型別意義
quick
不掃瞄行,不檢查錯誤的鏈結。
fast
只檢查沒有被正確關閉的表。
changed
只檢查上次檢查後被更改的表,和沒有被正確關閉的表。
medium
掃瞄行,以驗證被刪除的鏈結是有效的。也可以計算各行的關鍵字校驗和,並使用計算出的校驗和驗證這一點。
extended
對每行的所有關鍵字進行乙個全面的關鍵字查詢。這可以確保表是100%一致的,但是花的時間較長。
如果沒有指定quick, medium或extended選項,則對於動態格式myisam表,預設檢查型別是medium。這與對錶執行myisamchk --medium-checktbl_name的結果相同。對於靜態格式myisam表,預設檢查型別也是medium,除非changed或fast已被指定。在此情況下,預設值為quick。對於changed和fast,行掃瞄被跳過,因為行極少被破壞。
您可以組合檢查選項,如下面的例子所示。該例子對錶進行了乙個快速檢查,來檢視該錶是否被正確關閉:
check table test_table fast quick;
注釋:在有些情況下,check table會更改表。如果表被標記為「corrupted」或「not closed properly」,則出現這種情況。但是check table不會找出表中的問題。在這種情況下,check table會把表標記為良好。
如果乙個表被破壞,很有可能問題在索引中,而不在資料部分中。所有前述的檢查型別都可以徹底地檢查索引,因此,可以找出多數的錯誤。
如果您只想要檢查您假定的表是良好的,您應該不使用檢查選項或quick選項。當您時間匆忙時,應使用quick。quick無法找出資料檔案中的錯誤的風險非常小。(在多數情況下,在正常使用中,mysql應能在資料檔案中找出錯誤。如果找出了錯誤,表被標記為「corrupted」,並不能被使用,直到修復為止。)
如果您想要時常檢查表,fast和changed多數情況下從原本中被使用(例如,從cron中被執行)。在多數情況下,fast優先於changed。(只有一種情況fast不優先於changed,那就是當您懷疑您在myisam**中發現了錯誤。)
當mysql試圖通過關鍵字更新一行或查詢一行時,如果您已經執行了乙個常規檢查後但仍得到來自表的奇怪的錯誤,此時使用extended。(如果常規的檢查執行成功,則基本用不著extended。)
被check table報告的部分問題不會被自動修正:
·發現行。此行中,auto_increment列有0值。
這意味著,您在表中有一行,該行的auto_increment索引列包含0值。(可以通過使用update語句,明確地把列設定為0,以建立乙個auto_increment列為0的行。)
這本身不是乙個錯誤,但是如果您決定轉儲表並恢復表,或對錶進行alter table,那麼會導致出現麻煩。在此情況下,auto_increment列會根據auto_increment列的結果更改值,這會導致出現問題,如重複關鍵字錯誤等。
要消除警告,只需執行乙個update語句,把列設定為除0以外的值。
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大大少於資料的實際雜湊程度,那麼索引就基本失效了。我們可...