MySQL 索引重建


MySQL 索引重建

 

 

當你對InnoDB進行修改操作時,例如刪除一些行,這些行只是被標記為“已刪除”,而不是真的從索引中物理刪除了,因而空間也沒有真的被釋放回收。

 

InnoDB的Purge線程會異步的來清理這些沒用的索引鍵和行,但是依然沒有把這些釋放出來的空間還給操作系統重新使用,因而會導致頁面中存在很多空洞。

 

如果表結構中包含動態長度字段,那么這些空洞甚至可能不能被InnoDB重新用來存新的行,因為空間空間長度不足。

 

有些用戶可能會使用 OPTIMIZE TABLE 或者 ALTER TABLE <table> ENGINE=InnoDB 來重建這些表,但是這樣會導致表的拷貝,如果臨時空間不足甚至不足以進行一次 OPTIMIZE TABLE 操作。

並且如果你用的是共享表空間方式,OPTIMIZE TABLE 會導致你的共享表空間文件持續增大,因為整理的索引和數據都追加在數據文件的末尾。

 

InnoDB類型的表是無法使用optimize table命令

 

## 重新索引k

一、

 

alter table T drop index k;

alter table T add index(k);

 

## 重建主鍵索引

一、

alter table T drop primary key;

alter table T add primary key(id);

 

二、

alter table T engine=InnoDB;

可以釋放空洞,這是由於在轉換數據引擎(即使沒有真正轉換)的時候,會將表中的所有數據讀取,再重新寫入,這個過程中,會釋放空洞(效率慢)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM