刪除MySQL表中內容,表大小反而變大了

2021-07-02 06:50:41 字數 1415 閱讀 5010

今天空間商告訴我資料庫空間滿了,檢查了一下,發現**使用者行為記錄資料表竟然佔了20多mb。積累了半年了,該刪除釋放一下空間了。果斷delete之後發現資料庫空間竟然沒少,雖然資料記錄數是零。

原來這是因為刪除操作後在資料檔案中留下碎片所致。delete只是將資料標識位刪除,並沒有整理資料檔案,當插入新資料後,會再次使用這些被置為刪除標識的記錄空間。另外實際操作過程中還發現這個問題還存在兩種情況。

(1)當delete後面跟條件的時候,則就會出現這個問題。如:

delete from table_name where 條件

刪除資料後,資料表占用的空間大小不會變。

(2)不跟條件直接delete的時候。如:

delete from table_name

清除了資料,同時資料表的空間也會變為0。

這就存在了乙個問題,在**的實際執行過程中。經常會存在這樣的附帶條件刪除資料的操作行為。天長日久,這不就在資料庫中浪費了很多的空間嗎。這個時候我們該使用 optimize table 指令對錶進行優化了。

如何使用 optimize 以及在什麼時候該使用 optimize 指令呢?

命令語法:optimize [local | no_write_to_binlog] table tbl_name [, tbl_name] ...

最簡單的:optimize table phpernote_article;

如果您已經刪除了表的一大部分,或者如果您已經對含有可變長度行的表(含有varchar, blob或text列的表)進行了很多更改,則應使用 optimize table。被刪除的記錄被保持在鏈結清單中,後續的insert操作會重新使用舊的記錄位置。您可以使用optimize table來重新 利用未使用的空間,並整理資料檔案的碎片。

在多數的設定中,您根本不需要執行optimize table。即使您對可變長度的行進行了大量的更新,您也不需要經常執行,每週一次或每月一次即可,只對特定的表執行。

optimize table只對myisam, bdb和innodb表起作用。

注意,在optimize table執行過程中,mysql會鎖定表。因此,這個操作一定要在**訪問量較少的時間段進行。

truncate

其語法結構為:

truncate [table] tbl_name

這裡簡單的給出個示例,

我想刪除 friends 表中所有的記錄,可以使用如下語句:

truncate table friends;

delete的效果有點像將mysql表中所有記錄一條一條刪除到刪完,而truncate相當於保留mysql表的結構,重新建立了這個表,所有的狀態都相當於新錶,這樣空間就減下來了。

好了,當然對於我們**不可能使用truncate table來清除了,因這樣之後所有資料都丟失了,這樣肯定是不合理的清除了,我們必須使用delete來刪除,然後再來修復優化表了哦。

MySql 表 建立表 刪除表 修改表

一 建立表 建立表語法 create table table name field1 datatype,field2 datatype,field3 datatype character set 字符集 collate 校驗規則 engine 儲存引擎 預設儲存引擎 mysql create tab...

關於刪除hbase表內容

hbase這個功能很是鬱悶,使用它給定的api刪除某個表的一些內容 public class testdelete extends testcase catch exception e public void delete throws exception public resultscanner ...

MySQL刪除表中的資料

mysql刪除表中的資料有三種方法,分別是delete drop,truncate。一 delete刪除表中的資料 delete好from結合使用,格式一般為 delete from 表名 where 條件,delete刪除資料是將mysql表中的資料一行一行的刪除,不刪除表的結構,也不釋放表的空間...