delete操作的幾種情況
- drop操作: 不管什麼引擎,Innodb還是myisam都會釋放磁盤空間
- truncate操作: truncate和drop一樣都會釋放磁盤空間,但與drop不同的是,truncate=drop+create,就是會新建一張空表,保留了mysql的表結構
- 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;
- 優化後的對比
存儲引擎區別
- innodb:
- 支持事務,外鍵,行級鎖,
- 屬於索引組織表,可以使用共享表空間存儲或多表空間存儲
- 共享表空間存儲與myisam一樣,以表名開頭,拓展名是frm;索引文件和數據文件都保存在一個表空間裏
- 使用多表空間存儲,每個表都有一個表空間文件用於存儲每個表的數據和索引
- myisam:
- 不支持外鍵,事務,屬於堆表
- 在磁盤存儲上有三個文件: frm用於存儲表的定義;myd用於存放數據;myi用於存放表索引