一、optimize table會重組表和索引資料,磁碟空間被回收:
1、建立臨時表:與原表結構相同;
2、複製資料:將原表資料複製到臨時表中;
3、最佳化數表:複製時,MySQL會重新整理和重組資料,去除碎片,提高資料連續性;
4、重新命名錶:將臨時表重新命名為原表。
optimize table your_table;
二、檢視錶佔用情況:
1、Name:表名稱
2、Engine:表的儲存引擎
3、Version :版本
4、Row_format:行格式。對於MyISAM引擎,這可能是Dynamic,Fixed或Compressed。動態行的行長度可變,例如Varchar或Blob型別欄位。固定行是指行長度不變,例如Char和Integer型別欄位。
5、Rows :表中的行數。對於非事務性表,這個值是精確的,對於事務性引擎,這個值通常是估算的。
6、Avg_row_length :平均每行包括的位元組數
7、Data_length :整個表的資料量(單位:位元組)
8、Max_data_length :表可以容納的最大資料量
9、Index_length :索引佔用磁碟的空間大小
10、Data_free :對於MyISAM引擎,標識已分配,但現在未使用的空間,並且包含了已被刪除行的空間。
11、Auto_increment :下一個Auto_increment的值
12、Create_time :表的建立時間
13、Update_time :表的最近更新時間
14、Check_time :使用 check table 或myisamchk工具檢查表的最近時間
15、Collation :表的預設字符集和字元排序規則
16、Checksum :如果啟用,則對整個表的內容計算時的校驗和
17、Create_options :指表建立時的其他所有選項
18、Comment :包含了其他額外資訊,對於MyISAM引擎,包含了註釋徐標新,如果表使用的是innodb引擎 ,將現實表的剩餘空間。如果是一個檢視,註釋裡面包含了VIEW字樣。
show table status from your_db like 'your_table'
SELECT table_name, round(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)" FROM information_schema.tables WHERE table_schema = "your_db" AND table_name = "your_table"; SELECT SUM(DATA_LENGTH + INDEX_LENGTH) FROM information_schema.tables WHERE table_schema = "your_db" AND table_name = "your_table";
information_schema在mysql8.0之後有快取,資料不是最新的,可以透過以下獲取最新的統計資料
ANALYZE TABLE `your_table`;