2017-08-30 61 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