2017-08-30 60 views
-3

我有包含2000萬條記錄的表。 每天我刪除100K記錄和100K記錄被插入,但是當我插入記錄需要更多時間。SQL插入查詢減慢插入100k記錄時

表有一個聚集索引(主鍵)。

我已經嘗試過sp_updatestats刪除記錄

+3

https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question /)**和** [如何創建一個最小,完整和可驗證的示例](https://stackoverflow.com/help/mcve),然後編輯你的問題相應地吸引更多人加入你的帖子。 –

+0

歡迎來到Stack Overflow。 @MarcinOrlowski有一個很好的建議。另請閱讀此http://meta.stackoverflow.com/a/271056/並特別注意查詢性能部分。然後[編輯]你的問題。 –

+0

「更多時間」對我們來說毫無意義。首先,「更多」必須與某些東西相比,即使是「很多時間」,它仍然可能是10分鐘或10個小時。 –

回答

0

所以,你保持200天左右的價值的數據後? (也許6個月?)而你正在刪除最古老的一天?什麼是PRIMARY KEY?也許是AUTO_INCREMENT?如果不是,那麼我們需要研究它。你有一些日期時間或時間戳列。

PARTITION BY RANGE(TO_DAYS(datetime))進入約28周。然後每週DROP PARTITIONREORGANIZE PARTITIONS future INTO next_week, future。更多詳情here

因此,刪除將是'即時',同樣會創建一個新的分區。其他分區不會被混淆,從而避免當前導致它「花費更多時間」的任何事情。

如果您需要進一步討論,請提供SHOW CREATE TABLE並告訴我們您是如何進行大刪除的。

0

您正在經歷餐桌膨脹。當你刪除記錄時,磁盤空間永遠不會被MySQL釋放,因此選擇和插入需要搜索你已經刪除的所有垃圾,導致你的速度下降。這是我選擇使用postgres進行非平凡項目的主要原因之一。您的實際問題是您的數據庫設置選擇。

你最好的選擇是按日期劃分你的表格。我發現這在你的情況下大大加快了速度。 https://dev.mysql.com/doc/refman/5.5/en/partitioning-range.html

編輯:這可能是值得你花時間閱讀,以及:我建議你第一次讀到** [怎麼問問題的完美(一些提示https://www.jeffgeerling.com/blogs/jeff-geerling/reclaim-your-hard-drive-saving