国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql優(yōu)化(table操作)

2024-07-24 12:40:07
字體:
供稿:網(wǎng)友
Analyze Table

MySQL 的Optimizer(優(yōu)化元件)在優(yōu)化SQL語句時(shí),首先需要收集一些相關(guān)信息,其中就包括表的cardinality(可以翻譯為“散列程度”),它表示某個(gè)索引對應(yīng)的列包含多少個(gè)不同的值――如果cardinality大大少于數(shù)據(jù)的實(shí)際散列程度,那么索引就基本失效了。
我們可以使用SHOW INDEX語句來查看索引的散列程度:

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,索引基本失效。
下面我們通過Analyze Table語句來修復(fù)索引:

ANALYZE TABLE PLAYERS;
SHOW INDEX FROM PLAYERS;
結(jié)果是:
TABLE   KEY_NAME COLUMN_NAME CARDINALITY
------- -------- ----------- -----------
PLAYERS PRIMARY  PLAYERNO           1000

此時(shí)索引已經(jīng)修復(fù),查詢效率大大提高。

需要注意的是,如果開啟了binlog,那么Analyze Table的結(jié)果也會寫入binlog,我們可以在analyze和table之間添加關(guān)鍵字local取消寫入。

Checksum Table

數(shù)據(jù)在傳輸時(shí),可能會發(fā)生變化,也有可能因?yàn)槠渌驌p壞,為了保證數(shù)據(jù)的一致,我們可以計(jì)算checksum(校驗(yàn)值)。
使用MyISAM引擎的表會把checksum存儲起來,稱為live checksum,當(dāng)數(shù)據(jù)發(fā)生變化時(shí),checksum會相應(yīng)變化。
在執(zhí)行Checksum Table時(shí),可以在最后指定選項(xiàng)qiuck或是extended;qiuck表示返回存儲的checksum值,而extended會重新計(jì)算checksum,如果沒有指定選項(xiàng),則默認(rèn)使用extended。

Optimize Table

經(jīng)常更新數(shù)據(jù)的磁盤需要整理碎片,數(shù)據(jù)庫也是這樣,Optimize Table語句對MyISAM和InnoDB類型的表都有效。
如果表經(jīng)常更新,就應(yīng)當(dāng)定期運(yùn)行Optimize Table語句,保證效率。
與Analyze Table一樣,Optimize Table也可以使用local來取消寫入binlog。

Check Table

數(shù)據(jù)庫經(jīng)常可能遇到錯(cuò)誤,譬如數(shù)據(jù)寫入磁盤時(shí)發(fā)生錯(cuò)誤,或是索引沒有同步更新,或是數(shù)據(jù)庫未關(guān)閉MySQL就停止了。
遇到這些情況,數(shù)據(jù)就可能發(fā)生錯(cuò)誤:
Incorrect key file for table: ' '. Try to repair it.
此時(shí),我們可以使用Check Table語句來檢查表及其對應(yīng)的索引。
譬如我們運(yùn)行
CHECK TABLE PLAYERS;

結(jié)果是
TABLE          OP    MSG_TYPE MSG_TEXT
-------------- ----- -------- --------
TENNIS.PLAYERS check status   OK

MySQL會保存表最近一次檢查的時(shí)間,每次運(yùn)行check table都會存儲這些信息:

執(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:用來測試在更早版本的MySQL中建立的表是否與當(dāng)前版本兼容。
QUICK:速度最快的選項(xiàng),在檢查各列的數(shù)據(jù)時(shí),不會檢查鏈接(link)的正確與否,如果沒有遇到什么問題,可以使用這個(gè)選項(xiàng)。
FAST:只檢查表是否正常關(guān)閉,如果在系統(tǒng)掉電之后沒有遇到嚴(yán)重問題,可以使用這個(gè)選項(xiàng)。
CHANGED:只檢查上次檢查時(shí)間之后更新的數(shù)據(jù)。
MEDIUM:默認(rèn)的選項(xiàng),會檢查索引文件和數(shù)據(jù)文件之間的鏈接正確性。
EXTENDED:最慢的選項(xiàng),會進(jìn)行全面的檢查。

Repair Table

用于修復(fù)表,只對MyISAM和ARCHIVE類型的表有效。
這條語句同樣可以指定選項(xiàng):
QUICK:最快的選項(xiàng),只修復(fù)索引樹。
EXTENDED:最慢的選項(xiàng),需要逐行重建索引。
USE_FRM:只有當(dāng)MYI文件丟失時(shí)才使用這個(gè)選項(xiàng),全面重建整個(gè)索引。

與Analyze Table一樣,Repair Table也可以使用local來取消寫入binlog。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 广丰县| 班玛县| 射阳县| 五常市| 乌兰察布市| 苏尼特右旗| 福海县| 东兰县| 乌拉特中旗| 荣成市| 图木舒克市| 怀宁县| 株洲县| 湘潭市| 牙克石市| 招远市| 双辽市| 正定县| 云安县| 东阳市| 莎车县| 漯河市| 图片| 厦门市| 上蔡县| 麻江县| 乌拉特后旗| 陕西省| 彰化市| 贵州省| 大洼县| 东城区| 察哈| 鄢陵县| 周宁县| 西昌市| 公主岭市| 赤水市| 文昌市| 陆川县| 瑞金市|