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;qiuck表示返回儲存的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中建立的表是否與當前版本相容。
fast:只檢查表是否正常關閉,如果在系統掉電之後沒有遇到嚴重問題,可以使用這個選項。
changed:只檢查上次檢查時間之後更新的資料。
extended:最慢的選項,會進行全面的檢查。
repair table
用於修復表,只對myisam和archive型別的表有效。
這條語句同樣可以指定選項:
quick:最快的選項,只修復索引樹。
extended:最慢的選項,需要逐行重建索引。
use_frm:只有當myi檔案丟失時才使用這個選項,全面重建整個索引。
與analyze table一樣,repair table也可以使用local來取消寫入binlog。
mysql表維護語句 MySQL
13.5.2.3.check table語法 check table tbl name tbl name option option 檢查乙個或多個表是否有錯誤。check table對myisam和innodb表有作用。對於myisam表,關鍵字統計資料被更新。check table也可以檢查檢視...
Mysql的維護語句
analyze table mysql 的optimizer 優化元件 在優化sql語句時,首先需要收集一些相關資訊,其中就包括表的cardinality 可以翻譯為 雜湊程度 它表示某個索引對應的列包含多少個不同的值 如果cardinality大大少於資料的實際雜湊程度,那麼索引就基本失效了。我們...
MySQL的維護語句
analyze table mysql的optimizer 優化元件 在優化sql語句時,首先需要收集一些相關資訊,其中就包括表的cardinality 可以翻譯為 雜湊程度 它表示某個索引對應的列包含多少個不同的值 如果cardinality大大少於資料的實際雜湊程度,那麼索引就基本失效了。我們可...