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'; /*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資料表
如果資料表有問題,可以利用 recover quick引數做修補的工作 linux myisamchk recover quick tbl name linux isamchk recover quick tbl name 如果上面的方法不能解決問題,可以將 quick引數去掉 linux myis...
mysql的優化 MySQL優化
一 sql語句優化 1 使用limit對查詢結果的記錄進行限定 2 避免select 將需要查詢的字段列出來 3 使用連線 join 來代替子查詢 4 拆分大的delete或insert語句 二 選擇合適的資料型別 1 使用可存下資料的最小的資料型別,整型 date,time char,varcha...
mysql 隨機優化 mysql 優化
mysql優化包括兩方面,一方面是sql優化,另一方面是資料庫配置優化 一 sql優化 1.優化資料型別 盡量將字段設定為 not null,如果你要儲存null,手動去設定它,而不是把它設為預設值 盡量可能的使用更小的字段,但也不要太過執著減小資料型別,要為以後的程式拓展預留一定的空間 盡量少用v...