optimize優化表空間mysql
optimize 優化表
OPTIMIZE 命令支持的引擎MyIsam, InnoDB, ARCHVE
當對錶有大量的增刪改操做時,須要用optimize對錶進行優化,能夠減小空間與提升I/O性能,
命令optimize table tablename;sql
1.假若有session表且存儲引擎爲MyISAM
mysql> OPTIMIZE TABLE session;
+--------------+----------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------+----------+----------+----------+
| test.session | optimize | status | OK |
+--------------+----------+----------+----------+
1 row in set
2.若是是InnoDB引擎
首先查看innodb_file_per_table(是否獨享表空間)。
mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set
on表示打開了
OFF表明開啓共享表空間沒有打開
即採用的是默認的共享表空間
這個時候能夠在mysql的datadir路徑下看到一個很是大的文件ibdata1,
這個文件存儲了全部InnoDB表的數據與索引
若是開啓了獨享表空間,即每張表都有ibdfile,這個時候若是刪除了大量的行,索引會重組而且會釋放相應的空間所以沒必要優化
因爲共享表空間全部表的數據與索引都存放於ibddata1文件中
隨着數據量的增加會致使該文件愈來愈大,超過10G的時候查詢速度就很是慢,所以在編譯的時候最好開啓獨享表空間,由於mysql默認是關閉了獨享表空間
下面有兩個解決方案
方案一:先邏輯備份全部的數據庫,將配置文件中innodb_file_per_table參數=1,再將備份導入
方案二:只要修改innodb_file_per_table參數,而後將須要修改的全部innodb的表都運行一遍
alter table table_name engine=innodb;
便可使用第二種方式修改後,原來庫中的表中的數據會繼續存放於ibdata1中,
新建的表纔會使用獨立表空間數據庫
stu是innodb
mysql> OPTIMIZE TABLE stu;
+----------+----------+----------+-------------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+----------+----------+----------+-------------------------------------------------------------------+
| test.stu | optimize | note | Table does not support optimize, doing recreate + analyze instead |
| test.stu | optimize | status | OK |
+----------+----------+----------+-------------------------------------------------------------------+
2 rows in set
這時須要
mysql> alter table stu engine='innodb';
Query OK, 0 rows affected
Records: 0 Duplicates: 0 Warnings: 0session
mysql> analyze table stu;
+----------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+----------+---------+----------+----------+
| test.stu | analyze | status | OK |
+----------+---------+----------+----------+
1 row in set
來優化表ide