當Innodb 表數據頻繁 update ,更新的數據會重新放置,舊數據會形成空洞,隨着時間的推移,空洞會越來越大。
可以通過 information_schema.table 表查看數據空洞過大的表
SQL如下:
SELECT table_schema,TABLE_NAME , concat(data_free/1024/1024,"M") FROM `information_schema`.tables WHERE data_free >8*1024*1024 AND ENGINE ='innodb' ORDER BY data_free DESC;
數據空洞過大,會影響SQL的執行速度, 要徹底解決空洞問題需要從 update 語句入手,確定更新是否有意義, 此外通過 ALTER TABLE table_name ENGINE = Innodb; 回收表空間