Mysql碎片清理
阿新 • • 發佈:2021-06-15
查詢所有有碎片的表
SELECT
table_schema db,
table_name,
concat( TRUNCATE ( data_free / 1024 / 1024, 2 ), ' MB' ) AS DATA_FREE
FROM
information_schema.TABLES
WHERE
table_schema NOT IN ( 'information_schema', 'mysql' )
AND TRUNCATE ( data_free / 1024 / 1024, 2 ) > 1024;
清理sql
語法:
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE table_name1 , table_name2
說明:
OPTIMIZE TABLE可以一次性對多個表進行碎片整理,只需要在OPTIMIZE TABLE後面接多個表名,並以英文逗號隔開即可
OPTIMIZE TABLE語句有兩個可選的關鍵字:LOCAL和NO_WRITE_TO_BINLOG。在預設情況下,OPTIMIZE TABLE語句將會被記錄到二進位制日誌中,如果我們指定了LOCAL或NO_WRITE_TO_BINLOG關鍵字,則不會記錄。當然,一般情況下,我們也無需關注這兩個關鍵字。
如果mysql是主從複製模式,不需要使用這兩個關鍵字,master機器清理後slave機器會自動同步清理
optimize table 庫名.表名,庫名.表名,庫名.表名;