MySQL的delete操作對錶空間的影響

delete操作的幾種情況

  1. drop操作: 不管什麼引擎,Innodb還是myisam都會釋放磁盤空間
  2. truncate操作: truncate和drop一樣都會釋放磁盤空間,但與drop不同的是,truncate=drop+create,就是會新建一張空表,保留了mysql的表結構
  3. delete操作:
    • delete from table_name刪除了全部數據,對於myisam會釋放磁盤空間,innodb不會釋放
    • delete from 帶where的刪除都不會釋放磁盤空間,可以使用optimize table name進行釋放

分析

1.刪除後並不會把數據從表中刪除,而是以碎片形式繼續存在表空間,可以使用命令來查看

show table status like 'table_name';

2.data_free表示碎片的大小

3. 使用optimize優化

optimize table table_name;
  1. 優化後的對比
    在這裏插入圖片描述

存儲引擎區別

  1. innodb:
  • 支持事務,外鍵,行級鎖,
  • 屬於索引組織表,可以使用共享表空間存儲或多表空間存儲
    • 共享表空間存儲與myisam一樣,以表名開頭,拓展名是frm;索引文件和數據文件都保存在一個表空間裏
    • 使用多表空間存儲,每個表都有一個表空間文件用於存儲每個表的數據和索引
  1. myisam:
  • 不支持外鍵,事務,屬於堆表
  • 在磁盤存儲上有三個文件: frm用於存儲表的定義;myd用於存放數據;myi用於存放表索引
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章