2012-05-01 58 views
1

我使用設置爲每小時運行的cron選項卡刪除行。爲了提高性能和減少碎片,最好的方法是什麼?MySQL刪除性能

另外,我應該運行刪除完成後OPTIMIZE TABLE?

+0

對於數據的大塊,我更喜歡'創造儘可能SELECT'進入節奏表,我想_TO keep_行,然後丟棄舊錶和重命名的速度進入目標。 – vyegorov

+0

表中有多少行以及小時中有多少百分比被刪除? – zanlok

回答

1

答案將取決於您的數據和多少行你在一個時間刪除。

如果可能的話,使用單個查詢(每行而不是一個查詢)刪除行。例如:

DELETE FROM my_table WHERE status="rejected" 

如果可能,請在您的WHERE子句中使用索引列。這將幫助它在不進行全表掃描的情況下選擇需要刪除的行。

如果要刪除全部的數據,請使用TRUNCATE TABLE。

如果使用單個查詢刪除數據導致性能問題,你可以嘗試限制有多少行刪除(通過添加LIMIT子句),並更頻繁地運行刪除過程。這會隨着時間推移刪除。

根據文檔,如果刪除了表的大部分或者對具有可變長度行的表進行了許多更改(包含VARCHAR,VARBINARY,BLOB或TEXT的表),則應使用OPTIMIZE TABLE列)。

優化表可能會非常昂貴。如果可以,請嘗試刪除數據並每天優化表格一次(晚上)。這將限制對用戶的任何影響。

+0

注意:如果截斷,則不需要優化 – zanlok