【发布时间】:2017-07-30 18:40:59
【问题描述】:
我们有一个超过 62k 行的表。我们正在对其运行一个非常简单的删除查询,需要 45 分钟才能完成:
DELETE FROM myTable WHERE createdtime < '2017-03-07 05:00:00.000'
我们尝试过的事情:
1- 在时间戳列上添加了一个索引,但没有帮助。
2- 使用函数分批删除 20 或 50 行,这仍然非常慢。
3- 删除了引用此表的所有外键约束及其自己的主键约束,这确实有所帮助并将时间缩短到几秒钟,但我们无法在生产数据库上安全地执行此操作,因为它会锁定表并防止在事务运行时进行读写。
我不相信这个查询需要这么长时间才能完成是正常的。任何建议表示赞赏。
【问题讨论】:
-
Dropped all the foreign key constraints referencing this table这些 FK 是否有支持它们的索引(在 other 表上)? -
他说了什么。显然,时间花在查找 FK 约束上
-
性能问题应该包括 EXPLAIN ANALYZE 和一些关于表大小、索引、当前时间性能、期望时间等的信息。慢是一个相对术语,我们需要一个真正的值来比较。 MySQL 也请阅读How-to-Ask
-
@joop 我不敢相信我自己没有想到这一点!请添加它作为答案,以便我可以将其标记为已解决,因为这解决了问题。谢谢!
标签: postgresql foreign-keys sql-delete postgresql-performance