我有一個包含大量數據的表。數據需要經常更新:刪除舊數據並添加新數據。我有兩個選擇mysql刪除效率
- ,無論是否存在缺失事件,我刪除的條目立即
- 我打上刪除的條目,並使用cron作業刪除在unpeak時間。
這兩個選項之間有什麼效率差?或者更好的解決方案?
我有一個包含大量數據的表。數據需要經常更新:刪除舊數據並添加新數據。我有兩個選擇mysql刪除效率
這兩個選項之間有什麼效率差?或者更好的解決方案?
然而,在操作刪除一行,對性能的影響應該不會那麼大。如果您的測量結果顯示數據庫花費大量時間刪除行,那麼您的標記和掃描方法可能會有所幫助。這裏的關鍵詞大概是,測量值爲 - 除非單次刪除比更新速度慢得多,否則我不打擾。
您應該使用low_priority_updates - http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_low_priority_updates。與插入/刪除/更新操作相比,這將爲您的選擇賦予更高的優先級。我在生產中使用了它,並且獲得了相當不錯的速度提升。我看到的唯一問題是,如果發生服務器崩潰,您將丟失更多數據。
對於MySQL,刪除只是在內部標記爲刪除,並且當CPU(幾乎)空閒時,MySQL會更新索引。
不過,如果這是一個問題,並且您要刪除多行,請考慮使用DELETE QUICK。這告訴InnoDB不更新索引,只是將其標記爲已刪除,因此可以重用。
要恢復未使用的索引空間,每晚簡單地進行OPTIMIZE TABLE。
在這種情況下,不需要在您的應用程序中實現MySQL將在內部執行的功能。
有多大?數千行,數百萬? – 2010-08-18 19:49:26