mysql 修護優化

2021-09-22 16:36:06 字數 2463 閱讀 5355

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...