Mysql用optimize table 最佳化

杜子烟發表於2024-09-14

一、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`;

相關文章