mysql中如何優(yōu)化表釋放表空間
mysql優(yōu)化表釋放表空間
方法一:optimize table table_name
這是我們經(jīng)常見到的方法,這里就不在過多介紹。
方法二:alter table table_name engine=engine_name
該方法通常用于切換表的引擎,例如MyISAM轉(zhuǎn)為InnoDB,但是同樣適用于釋放表空間,只不過切換后的引擎和原來的engine相同罷了。
注意事項
1.這兩種方式都適用于我們常用的表,myisam和innodb。
2.優(yōu)化表的時候會鎖表,數(shù)據(jù)表越大,耗時越長,因此不要在網(wǎng)站忙時進(jìn)行表優(yōu)化。
mysql空間釋放
今天還原了一個數(shù)據(jù)庫。發(fā)現(xiàn)數(shù)據(jù)量有數(shù)十GB,想著看看哪些表的數(shù)據(jù)量多,于是查詢了下。數(shù)據(jù)還真不少。3000多萬行,這兒一張表居然有近1400萬數(shù)據(jù)。....慚愧。以前沒做什么處理。
USE information_schema; #?使用數(shù)據(jù)庫元數(shù)據(jù); SELECT table_name,table_rows FROM TABLES WHERE table_schema = 'tjpro' order by table_rows desc; #查詢表名和表行數(shù),數(shù)據(jù)庫為tjpro? SELECT sum(table_rows) FROM tables WHERE table_schema = 'tjpro'; #統(tǒng)計行數(shù) SELECT table_name,table_rows FROM tables WHERE table_schema = 'tjpro' order by table_rows desc limit 100; #查詢最多行數(shù)的表前100


使用delete刪除mysql數(shù)據(jù)的時候,mysql并沒有把數(shù)據(jù)文件刪除,而是將數(shù)據(jù)文件的標(biāo)識位刪除,沒有整理文件,因此不會徹底釋放空間。被刪除的數(shù)據(jù)將會被保存在一個鏈接清單中,當(dāng)有新數(shù)據(jù)寫入的時候,mysql會利用這些已刪除的空間再寫入。即,刪除操作會帶來一些數(shù)據(jù)碎片,正是這些碎片在占用硬盤空間。 -- 引自mysql
如何整理,清理這些空間呢,請往下看。
查詢占用空間大小
這時候,我刪除了數(shù)據(jù)最多的mis_system_data_remind_mas 表(測試庫喲)之后。我再次查詢該表占用的空間大小。
SELECT TABLE_NAME, (DATA_LENGTH+INDEX_LENGTH)/1048576, TABLE_ROWS FROM information_schema.tables WHERE TABLE_SCHEMA='dbname' AND TABLE_NAME='tablename(你的表名)';

默認(rèn)是M為單位。第二欄。約為2.8個GB大小。
- 然后清理一下。使用:OPTIMIZE TABLE
清理碎片
官方推薦使用 OPTIMIZE TABLE 命令來優(yōu)化表,該命令會重新利用未使用的空間,并整理數(shù)據(jù)文件的碎片。

等待的時間有點長。等完成后,再次查詢空間:
SELECT TABLE_NAME, (DATA_LENGTH+INDEX_LENGTH)/1048576, TABLE_ROWS FROM information_schema.tables WHERE TABLE_SCHEMA='dbname' AND TABLE_NAME='tablename(你的表名)';

可以看到,釋放的空間約為2.8GB。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL數(shù)據(jù)庫優(yōu)化技術(shù)之索引使用技巧總結(jié)
這篇文章主要介紹了MySQL數(shù)據(jù)庫優(yōu)化技術(shù)之索引使用方法,結(jié)合實例形式總結(jié)分析了MySQL表的優(yōu)化、索引設(shè)置、SQL優(yōu)化等相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下2016-07-07
Servermanager啟動連接數(shù)據(jù)庫錯誤如何解決
這篇文章主要介紹了Servermanager啟動連接數(shù)據(jù)庫錯誤如何解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10
解析mysql二進(jìn)制日志處理事務(wù)與非事務(wù)性語句的區(qū)別
本篇文章是對mysql二進(jìn)制日志處理事務(wù)與非事務(wù)性語句的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
MySQL數(shù)據(jù)庫分組查詢group by語句詳解
這篇文章主要介紹了MySQL數(shù)據(jù)庫分組查詢group by語句詳解,文中含有詳細(xì)示例代碼說明解析,有需要的朋友可以借鑒參考想=下,希望能夠有所幫助2021-09-09
使用MySQL MySqldump命令導(dǎo)出數(shù)據(jù)時的注意事項
這篇文章主要介紹了使用MySQL MySqldump命令導(dǎo)出數(shù)據(jù)時的注意事項,很實用的經(jīng)驗總結(jié),需要的朋友可以參考下2014-07-07

