mysql 維護(hù)常用命令
更新時(shí)間:2009年11月30日 19:39:00 作者:
需要維護(hù)mysql數(shù)據(jù)庫(kù)的朋友可以參考下。
Analyze Table
MySQL 的Optimizer(優(yōu)化元件)在優(yōu)化SQL語(yǔ)句時(shí),首先需要收集一些相關(guān)信息,其中就包括表的cardinality(可以翻譯為“散列程度”),它表示某個(gè)索引對(duì)應(yīng)的列包含多少個(gè)不同的值——如果cardinality大大少于數(shù)據(jù)的實(shí)際散列程度,那么索引就基本失效了。
我們可以使用SHOW INDEX語(yǔ)句來(lái)查看索引的散列程度:
SHOW INDEX FROM PLAYERS;
TABLE KEY_NAME COLUMN_NAME CARDINALITY
------- -------- ----------- -----------
PLAYERS PRIMARY PLAYERNO 14
因?yàn)榇藭r(shí)PLAYER表中不同的PLAYERNO數(shù)量遠(yuǎn)遠(yuǎn)多于14,索引基本失效。
下面我們通過(guò)Analyze Table語(yǔ)句來(lái)修復(fù)索引:
ANALYZE TABLE PLAYERS;
SHOW INDEX FROM PLAYERS;
結(jié)果是:
TABLE KEY_NAME COLUMN_NAME CARDINALITY
------- -------- ----------- -----------
PLAYERS PRIMARY PLAYERNO 1000
此時(shí)索引已經(jīng)修復(fù),查詢效率大大提高。
需要注意的是,如果開(kāi)啟了binlog,那么Analyze Table的結(jié)果也會(huì)寫(xiě)入binlog,我們可以在analyze和table之間添加關(guān)鍵字local取消寫(xiě)入。
Checksum Table
數(shù)據(jù)在傳輸時(shí),可能會(huì)發(fā)生變化,也有可能因?yàn)槠渌驌p壞,為了保證數(shù)據(jù)的一致,我們可以計(jì)算checksum(校驗(yàn)值)。
使用MyISAM引擎的表會(huì)把checksum存儲(chǔ)起來(lái),稱為live checksum,當(dāng)數(shù)據(jù)發(fā)生變化時(shí),checksum會(huì)相應(yīng)變化。
在執(zhí)行Checksum Table時(shí),可以在最后指定選項(xiàng)qiuck或是extended;qiuck表示返回存儲(chǔ)的checksum值,而extended會(huì)重新計(jì)算checksum,如果沒(méi)有指定選項(xiàng),則默認(rèn)使用extended。
Optimize Table
經(jīng)常更新數(shù)據(jù)的磁盤(pán)需要整理碎片,數(shù)據(jù)庫(kù)也是這樣,Optimize Table語(yǔ)句對(duì)MyISAM和InnoDB類型的表都有效。
如果表經(jīng)常更新,就應(yīng)當(dāng)定期運(yùn)行Optimize Table語(yǔ)句,保證效率。
與Analyze Table一樣,Optimize Table也可以使用local來(lái)取消寫(xiě)入binlog。
Check Table
數(shù)據(jù)庫(kù)經(jīng)??赡苡龅藉e(cuò)誤,譬如數(shù)據(jù)寫(xiě)入磁盤(pán)時(shí)發(fā)生錯(cuò)誤,或是索引沒(méi)有同步更新,或是數(shù)據(jù)庫(kù)未關(guān)閉MySQL就停止了。
遇到這些情況,數(shù)據(jù)就可能發(fā)生錯(cuò)誤:
Incorrect key file for table: ' '. Try to repair it.
此時(shí),我們可以使用Check Table語(yǔ)句來(lái)檢查表及其對(duì)應(yīng)的索引。
譬如我們運(yùn)行
CHECK TABLE PLAYERS;
結(jié)果是
TABLE OP MSG_TYPE MSG_TEXT
-------------- ----- -------- --------
TENNIS.PLAYERS check status OK
MySQL會(huì)保存表最近一次檢查的時(shí)間,每次運(yùn)行check table都會(huì)存儲(chǔ)這些信息:
執(zhí)行
SELECT TABLE_NAME, CHECK_TIME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'PLAYERS'
AND TABLE_SCHEMA = 'TENNIS';
結(jié)果是
TABLE_NAME CHECK_TIME
---------- -------------------
PLAYERS 2006-08-21 16:44:25
Check Table還可以指定其它選項(xiàng):
UPGRADE:用來(lái)測(cè)試在更早版本的MySQL中建立的表是否與當(dāng)前版本兼容。
QUICK:速度最快的選項(xiàng),在檢查各列的數(shù)據(jù)時(shí),不會(huì)檢查鏈接(link)的正確與否,如果沒(méi)有遇到什么問(wèn)題,可以使用這個(gè)選項(xiàng)。
FAST:只檢查表是否正常關(guān)閉,如果在系統(tǒng)掉電之后沒(méi)有遇到嚴(yán)重問(wèn)題,可以使用這個(gè)選項(xiàng)。
CHANGED:只檢查上次檢查時(shí)間之后更新的數(shù)據(jù)。
MEDIUM:默認(rèn)的選項(xiàng),會(huì)檢查索引文件和數(shù)據(jù)文件之間的鏈接正確性。
EXTENDED:最慢的選項(xiàng),會(huì)進(jìn)行全面的檢查。
Repair Table
用于修復(fù)表,只對(duì)MyISAM和ARCHIVE類型的表有效。
這條語(yǔ)句同樣可以指定選項(xiàng):
QUICK:最快的選項(xiàng),只修復(fù)索引樹(shù)。
EXTENDED:最慢的選項(xiàng),需要逐行重建索引。
USE_FRM:只有當(dāng)MYI文件丟失時(shí)才使用這個(gè)選項(xiàng),全面重建整個(gè)索引。
與Analyze Table一樣,Repair Table也可以使用local來(lái)取消寫(xiě)入binlog。
MySQL 的Optimizer(優(yōu)化元件)在優(yōu)化SQL語(yǔ)句時(shí),首先需要收集一些相關(guān)信息,其中就包括表的cardinality(可以翻譯為“散列程度”),它表示某個(gè)索引對(duì)應(yīng)的列包含多少個(gè)不同的值——如果cardinality大大少于數(shù)據(jù)的實(shí)際散列程度,那么索引就基本失效了。
我們可以使用SHOW INDEX語(yǔ)句來(lái)查看索引的散列程度:
SHOW INDEX FROM PLAYERS;
TABLE KEY_NAME COLUMN_NAME CARDINALITY
------- -------- ----------- -----------
PLAYERS PRIMARY PLAYERNO 14
因?yàn)榇藭r(shí)PLAYER表中不同的PLAYERNO數(shù)量遠(yuǎn)遠(yuǎn)多于14,索引基本失效。
下面我們通過(guò)Analyze Table語(yǔ)句來(lái)修復(fù)索引:
ANALYZE TABLE PLAYERS;
SHOW INDEX FROM PLAYERS;
結(jié)果是:
TABLE KEY_NAME COLUMN_NAME CARDINALITY
------- -------- ----------- -----------
PLAYERS PRIMARY PLAYERNO 1000
此時(shí)索引已經(jīng)修復(fù),查詢效率大大提高。
需要注意的是,如果開(kāi)啟了binlog,那么Analyze Table的結(jié)果也會(huì)寫(xiě)入binlog,我們可以在analyze和table之間添加關(guān)鍵字local取消寫(xiě)入。
Checksum Table
數(shù)據(jù)在傳輸時(shí),可能會(huì)發(fā)生變化,也有可能因?yàn)槠渌驌p壞,為了保證數(shù)據(jù)的一致,我們可以計(jì)算checksum(校驗(yàn)值)。
使用MyISAM引擎的表會(huì)把checksum存儲(chǔ)起來(lái),稱為live checksum,當(dāng)數(shù)據(jù)發(fā)生變化時(shí),checksum會(huì)相應(yīng)變化。
在執(zhí)行Checksum Table時(shí),可以在最后指定選項(xiàng)qiuck或是extended;qiuck表示返回存儲(chǔ)的checksum值,而extended會(huì)重新計(jì)算checksum,如果沒(méi)有指定選項(xiàng),則默認(rèn)使用extended。
Optimize Table
經(jīng)常更新數(shù)據(jù)的磁盤(pán)需要整理碎片,數(shù)據(jù)庫(kù)也是這樣,Optimize Table語(yǔ)句對(duì)MyISAM和InnoDB類型的表都有效。
如果表經(jīng)常更新,就應(yīng)當(dāng)定期運(yùn)行Optimize Table語(yǔ)句,保證效率。
與Analyze Table一樣,Optimize Table也可以使用local來(lái)取消寫(xiě)入binlog。
Check Table
數(shù)據(jù)庫(kù)經(jīng)??赡苡龅藉e(cuò)誤,譬如數(shù)據(jù)寫(xiě)入磁盤(pán)時(shí)發(fā)生錯(cuò)誤,或是索引沒(méi)有同步更新,或是數(shù)據(jù)庫(kù)未關(guān)閉MySQL就停止了。
遇到這些情況,數(shù)據(jù)就可能發(fā)生錯(cuò)誤:
Incorrect key file for table: ' '. Try to repair it.
此時(shí),我們可以使用Check Table語(yǔ)句來(lái)檢查表及其對(duì)應(yīng)的索引。
譬如我們運(yùn)行
CHECK TABLE PLAYERS;
結(jié)果是
TABLE OP MSG_TYPE MSG_TEXT
-------------- ----- -------- --------
TENNIS.PLAYERS check status OK
MySQL會(huì)保存表最近一次檢查的時(shí)間,每次運(yùn)行check table都會(huì)存儲(chǔ)這些信息:
執(zhí)行
SELECT TABLE_NAME, CHECK_TIME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'PLAYERS'
AND TABLE_SCHEMA = 'TENNIS';
結(jié)果是
TABLE_NAME CHECK_TIME
---------- -------------------
PLAYERS 2006-08-21 16:44:25
Check Table還可以指定其它選項(xiàng):
UPGRADE:用來(lái)測(cè)試在更早版本的MySQL中建立的表是否與當(dāng)前版本兼容。
QUICK:速度最快的選項(xiàng),在檢查各列的數(shù)據(jù)時(shí),不會(huì)檢查鏈接(link)的正確與否,如果沒(méi)有遇到什么問(wèn)題,可以使用這個(gè)選項(xiàng)。
FAST:只檢查表是否正常關(guān)閉,如果在系統(tǒng)掉電之后沒(méi)有遇到嚴(yán)重問(wèn)題,可以使用這個(gè)選項(xiàng)。
CHANGED:只檢查上次檢查時(shí)間之后更新的數(shù)據(jù)。
MEDIUM:默認(rèn)的選項(xiàng),會(huì)檢查索引文件和數(shù)據(jù)文件之間的鏈接正確性。
EXTENDED:最慢的選項(xiàng),會(huì)進(jìn)行全面的檢查。
Repair Table
用于修復(fù)表,只對(duì)MyISAM和ARCHIVE類型的表有效。
這條語(yǔ)句同樣可以指定選項(xiàng):
QUICK:最快的選項(xiàng),只修復(fù)索引樹(shù)。
EXTENDED:最慢的選項(xiàng),需要逐行重建索引。
USE_FRM:只有當(dāng)MYI文件丟失時(shí)才使用這個(gè)選項(xiàng),全面重建整個(gè)索引。
與Analyze Table一樣,Repair Table也可以使用local來(lái)取消寫(xiě)入binlog。
相關(guān)文章
詳解MySQL事務(wù)的ACID如何實(shí)現(xiàn)
事務(wù)(Transaction)是并發(fā)控制的基本單位,所謂的事務(wù)呢,它是一個(gè)操作序列,這些操作要么都執(zhí)行,要么都不執(zhí)行,它是一個(gè)不可分割的工作單位,本文給大家詳細(xì)介紹了MySQL事務(wù)的ACID如何實(shí)現(xiàn),需要的朋友可以參考下2023-10-10MySQL 替換某字段內(nèi)部分內(nèi)容的UPDATE語(yǔ)句
至于字段內(nèi)部分內(nèi)容:比如替換標(biāo)題里面的產(chǎn)品價(jià)格,接下來(lái)為你詳細(xì)介紹下UPDATE語(yǔ)句的寫(xiě)法,感興趣的你可以參考下哈,希望可以幫助到你2013-03-03MySQL DISTINCT 的基本實(shí)現(xiàn)原理詳解
這篇文章主要介紹了MySQL DISTINCT 的基本實(shí)現(xiàn)原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07mysql5.6 主從復(fù)制同步詳細(xì)配置(圖文)
這篇文章主要介紹了mysql5.6 主從復(fù)制同步詳細(xì)配置,但不是很詳細(xì)推薦大家看下腳本之家以前的文章,需要的朋友可以參考下2016-04-04MySQL InnoDB架構(gòu)的相關(guān)總結(jié)
InnoDB存儲(chǔ)引擎架構(gòu)作為MySQL最常用的存儲(chǔ)引擎,每個(gè)后端程序員都應(yīng)有所了解,本文將具體講述MySQL InnoDB架構(gòu)的相關(guān)知識(shí),感興趣的朋友可以參考下2021-05-05mysql啟動(dòng)服務(wù)報(bào)1058錯(cuò)誤的解決方法
這篇文章主要介紹了mysql啟動(dòng)服務(wù)報(bào)1058錯(cuò)誤的解決方法,需要的朋友可以參考下2014-03-03