Mysql的Optimize?table命令使用及說(shuō)明
什么是optimizetable
在MySQL中,optimizetable命令用來(lái)重新整理(InnoDB & MyISAM)表格并優(yōu)化空間利用。
優(yōu)化后的表更容易被訪問(wèn),節(jié)省了磁盤空間,同時(shí)可以加速查詢,以達(dá)到更好的性能。
手冊(cè)中的相關(guān)描述
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] …
- 如果您已經(jīng)刪除了表的一大部分,或者如果您已經(jīng)對(duì)含有可變長(zhǎng)度行的表(含有VARCHAR, BLOB或TEXT列的表)進(jìn)行了很多更改,則應(yīng)使用OPTIMIZE TABLE。
- 被刪除的記錄被保持在鏈接清單中,后續(xù)的INSERT操作會(huì)重新使用舊的記錄位置。
- 您可以使用OPTIMIZE TABLE來(lái)重新利用未使用的空間,并整理數(shù)據(jù)文件的碎片。
- 在多數(shù)的設(shè)置中,您根本不需要運(yùn)行OPTIMIZE TABLE。
- 即使您對(duì)可變長(zhǎng)度的行進(jìn)行了大量的更新,您也不需要經(jīng)常運(yùn)行,每周一次或每月一次即可,只對(duì)特定的表運(yùn)行。
- OPTIMIZE TABLE只對(duì)MyISAM, BDB和InnoDB表起作用。
- 注意,在OPTIMIZE TABLE運(yùn)行過(guò)程中,MySQL會(huì)鎖定表。
換句話說(shuō):
MySQL數(shù)據(jù)庫(kù)的表格在不停的操作時(shí)間內(nèi)產(chǎn)生的page分布是不均勻的,這就導(dǎo)致有的頁(yè)變滿就不能繼續(xù)插入了,導(dǎo)致了表的碎片化以及空間的浪費(fèi)。
在進(jìn)行大量數(shù)據(jù)的插入和刪除時(shí),會(huì)進(jìn)一步加劇這種現(xiàn)象,使表格的性能下降。
通俗理解
當(dāng)你刪除數(shù)據(jù)時(shí),mysql并不會(huì)回收被已刪除數(shù)據(jù)的占據(jù)的存儲(chǔ)空間以及索引位。而是空在那里,等待新的數(shù)據(jù)來(lái)彌補(bǔ)這個(gè)空缺,這樣就有一個(gè)缺少,如果一時(shí)半會(huì),沒(méi)有數(shù)據(jù)來(lái)填補(bǔ)這個(gè)空缺,那這樣就太浪費(fèi)資源了。
所以對(duì)于寫比較頻煩的表,要定期進(jìn)行optimize,一個(gè)月一次,看實(shí)際情況而定了。
這時(shí),就需要使用optimizetable重新壓縮表格來(lái)回收空間和達(dá)到優(yōu)化性能。
使用
mysql里輸入以下命令:
OPTIMIZE TABLE table_name;
優(yōu)化多個(gè)表:
OPTIMIZE TABLE [table1],[table2],......[tablen];
注意點(diǎn)
① 優(yōu)化表格之前,最好備份一下表格的數(shù)據(jù)。如果數(shù)據(jù)非常龐大,優(yōu)化時(shí)間可能需要很長(zhǎng)時(shí)間。
② 在OPTIMIZE TABLE運(yùn)行過(guò)程中,MySQL會(huì)鎖定表。如果涉及海量的數(shù)據(jù)表,應(yīng)該考慮使用一些運(yùn)維手段避免現(xiàn)網(wǎng)的服務(wù)受到影響。
③ 使用alter table table_name engine=innodb 命令也可以同樣達(dá)到釋放空洞的效果。這是由于在轉(zhuǎn)換數(shù)據(jù)引擎(即便沒(méi)有真正轉(zhuǎn)換)的時(shí)候,mysql也會(huì)將表中的數(shù)據(jù)讀取出來(lái),再重新寫入,在這個(gè)過(guò)程中,空洞自然就沒(méi)有了
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用SQL注入漏洞登錄后臺(tái)的實(shí)現(xiàn)方法
工作需要,得好好補(bǔ)習(xí)下關(guān)于WEB安全方面的相關(guān)知識(shí),故撰此文,權(quán)當(dāng)總結(jié),別無(wú)它意。讀這篇文章,我假設(shè)讀者有過(guò)寫SQL語(yǔ)句的經(jīng)歷,或者能看得懂SQL語(yǔ)句2012-01-01
MySQL運(yùn)維實(shí)戰(zhàn)之使用二進(jìn)制安裝部署
這篇文章主要為大家介紹了MySQL運(yùn)維實(shí)戰(zhàn)之使用二進(jìn)制安裝部署示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
允許遠(yuǎn)程訪問(wèn)MySQL的實(shí)現(xiàn)方式
這篇文章主要介紹了允許遠(yuǎn)程訪問(wèn)MySQL的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
使用Canal和Kafka解決MySQL與緩存的數(shù)據(jù)一致性問(wèn)題
這篇文章主要介紹了使用Canal和Kafka解決MySQL與緩存的數(shù)據(jù)一致性問(wèn)題,文中通過(guò)圖文結(jié)合的方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-07-07
MySQL?數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí)
這篇文章主要介紹了MySQL?數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí),它是一類更具體的可以管理數(shù)據(jù)的軟件。但是實(shí)現(xiàn)數(shù)據(jù)庫(kù)的這個(gè)軟件,需要用到很多的數(shù)據(jù)結(jié)構(gòu),下面來(lái)看看文章是怎么具體介紹這個(gè)數(shù)據(jù)庫(kù)的2021-12-12
MySQL: Communications Link Failure的解決方案
本文主要介紹了MySQL: Communications Link Failure的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-11-11
mysql創(chuàng)建函數(shù)出現(xiàn)1418錯(cuò)誤的解決辦法
本篇文章是對(duì)在Mysql中創(chuàng)建函數(shù)報(bào)“ERROR 1418”的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

