我有包含2000万条记录的表。 每天我删除100K记录和100K记录被插入,但是当我插入记录需要更多时间。SQL插入查询减慢插入100k记录时
表有一个聚集索引(主键)。
我已经尝试过sp_updatestats删除记录
我有包含2000万条记录的表。 每天我删除100K记录和100K记录被插入,但是当我插入记录需要更多时间。SQL插入查询减慢插入100k记录时
表有一个聚集索引(主键)。
我已经尝试过sp_updatestats删除记录
所以,你保持200天左右的价值的数据后? (也许6个月?)而你正在删除最古老的一天?什么是PRIMARY KEY
?也许是AUTO_INCREMENT
?如果不是,那么我们需要研究它。你有一些日期时间或时间戳列。
PARTITION BY RANGE(TO_DAYS(datetime))
进入约28周。然后每周DROP PARTITION
和REORGANIZE PARTITIONS future INTO next_week, future
。更多详情here。
因此,删除将是'即时',同样会创建一个新的分区。其他分区不会被混淆,从而避免当前导致它“花费更多时间”的任何事情。
如果您需要进一步讨论,请提供SHOW CREATE TABLE
并告诉我们您是如何进行大删除的。
您正在经历餐桌膨胀。当你删除记录时,磁盘空间永远不会被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
https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question /)**和** [如何创建一个最小,完整和可验证的示例](https://stackoverflow.com/help/mcve),然后编辑你的问题相应地吸引更多人加入你的帖子。 –
欢迎来到Stack Overflow。 @MarcinOrlowski有一个很好的建议。另请阅读此http://meta.stackoverflow.com/a/271056/并特别注意查询性能部分。然后[编辑]你的问题。 –
“更多时间”对我们来说毫无意义。首先,“更多”必须与某些东西相比,即使是“很多时间”,它仍然可能是10分钟或10个小时。 –