久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術文章
文章詳情頁

mysql中如何優化表釋放表空間

瀏覽:32日期:2023-02-18 16:43:50
目錄
  • mysql優化表釋放表空間
  • mysql空間釋放
    • 查詢占用空間大小
    • 清理碎片
  • 總結

    mysql優化表釋放表空間

    方法一:optimize table table_name

    這是我們經常見到的方法,這里就不在過多介紹。

    方法二:alter table table_name engine=engine_name

    該方法通常用于切換表的引擎,例如MyISAM轉為InnoDB,但是同樣適用于釋放表空間,只不過切換后的引擎和原來的engine相同罷了。

    注意事項

    1.這兩種方式都適用于我們常用的表,myisam和innodb。

    2.優化表的時候會鎖表,數據表越大,耗時越長,因此不要在網站忙時進行表優化。

    mysql空間釋放

    今天還原了一個數據庫。發現數據量有數十GB,想著看看哪些表的數據量多,于是查詢了下。數據還真不少。3000多萬行,這兒一張表居然有近1400萬數據。....慚愧。以前沒做什么處理。

    USE information_schema; #?使用數據庫元數據;SELECT table_name,table_rows FROM TABLES WHERE table_schema = "tjpro" order by table_rows desc; #查詢表名和表行數,數據庫為tjpro?SELECT sum(table_rows) FROM tables WHERE table_schema = "tjpro"; #統計行數SELECT table_name,table_rows FROM tables WHERE table_schema = "tjpro" order by table_rows desc limit 100; #查詢最多行數的表前100

    使用delete刪除mysql數據的時候,mysql并沒有把數據文件刪除,而是將數據文件的標識位刪除,沒有整理文件,因此不會徹底釋放空間。被刪除的數據將會被保存在一個鏈接清單中,當有新數據寫入的時候,mysql會利用這些已刪除的空間再寫入。即,刪除操作會帶來一些數據碎片,正是這些碎片在占用硬盤空間。 -- 引自mysql

    如何整理,清理這些空間呢,請往下看。

    查詢占用空間大小

    這時候,我刪除了數據最多的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(你的表名)";

    默認是M為單位。第二欄。約為2.8個GB大小。

    • 然后清理一下。使用:OPTIMIZE TABLE

    清理碎片

    官方推薦使用 OPTIMIZE TABLE 命令來優化表,該命令會重新利用未使用的空間,并整理數據文件的碎片。

    等待的時間有點長。等完成后,再次查詢空間:

    SELECT TABLE_NAME, (DATA_LENGTH+INDEX_LENGTH)/1048576, TABLE_ROWS FROM information_schema.tables WHERE TABLE_SCHEMA="dbname" AND TABLE_NAME="tablename(你的表名)";

    可以看到,釋放的空間約為2.8GB。

    總結

    以上為個人經驗,希望能給大家一個參考,也希望大家多多支持。

    標簽: MySQL
    主站蜘蛛池模板: 民乐县| 绥芬河市| 冷水江市| 贡觉县| 华容县| 抚宁县| 赤壁市| 昭平县| 濮阳市| 蚌埠市| 大城县| 镇安县| 佛坪县| 乐昌市| 张家港市| 衡水市| 仪征市| 丽江市| 兰西县| 罗甸县| 徐州市| 饶平县| 鹿泉市| 界首市| 福州市| 海伦市| 阿拉善盟| 孝感市| 郁南县| 郧西县| 德格县| 边坝县| 监利县| 余姚市| 酒泉市| 丹巴县| 鄄城县| 霸州市| 公安县| 河西区| 梁平县|