2010-05-12 92 views
15

當我在innodb表上運行優化表時,我改爲收到此消息。這是否意味着桌子已經被優化了,但以不同的方式?優化innodb表

「表|優化|注|表不支持優化,重做+分析|」

回答

22

documentation

對於InnoDB表,OPTIMIZE TABLE被映射到ALTER TABLE,以重新生成表更新聚集索引指數統計和自由未使用的空間。從MySQL 5.1.27開始,當你在一個InnoDB表運行,這是顯示在OPTIMIZE TABLE的輸出,如下所示:

mysql> OPTIMIZE TABLE foo; 
+----------+----------+----------+----------------------------------------------------------- 
| Table | Op  | Msg_type | Msg_text              
+----------+----------+----------+-----------------------------------------------------------  
| test.foo | optimize | note  | Table does not support optimize, doing recreate + analyze ... 
| test.foo | optimize | status | OK                
+----------+----------+----------+----------------------------------------------------------- 

您可以通過啓動mysqld就其他存儲引擎OPTIMIZE TABLE工作--skip-new或--safe-mode選項。在這種情況下,OPTIMIZE TABLE僅映射到ALTER TABLE。

+2

比從未更好的遲到。 :) – 2013-04-23 14:15:09

3

的語法optimize表是

OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE 
tbl_name [, tbl_name] ... 

使用OPTIMIZE TABLE在這些情況下,根據表的類型:

  • 做大量的插入,更新後,或刪除操作上一個InnoDB表具有自己的.ibd文件,因爲它是在啓用innodb_file_per_table選項的情況下創建的。表和索引被重新組織,磁盤空間可以回收供操作系統使用。
  • 刪除大部分MyISAM或ARCHIVE表後,或者對具有可變長度行(具有VARCHAR,VARBINARY,BLOB或TEXT列的表)的MyISAM或ARCHIVE表進行許多更改之後。刪除的行保留在鏈接列表中,隨後的INSERT操作將重新使用舊的行位置。您可以使用OPTIMIZE TABLE來回收未使用的空間並對數據文件進行碎片整理。對錶進行大量更改後,此語句可能還會提高使用該表的語句的性能,有時還會顯着提高。