为什么PG的delete慢

为什么PG的delete慢,第1张

ref: https://www.postgresql.org/message-id/[email protected]

要删除的表 articles , articles 中有一个字段是表 comments 的外键,即:

最简单的办法就是在确认没有错误的情况下,disable trigger,删完后再打开。但是还有一种可能性就是在删除的时候PG会去关联的表中查找有没有关联的记录,本例中就是在删除articles中的东西时会在comments中按article_id查找,如果article_id在此时没有加索引,而且comments和articles表中都有大量数据的时候,就会出现很慢的情况。解决方案就是给comments表中的article_id加上index

删除数据很慢。实在没有办法的话,你可以把删除命令写成sql,然后用数据库命令行工具进行删除,要快速很多倍。比如mysql,用它的命令行比自己删除要快,比批量commit还要快很多。

添加数据与删除数据都可以这么做。直接用sql比通过关系对象模型要快。的确删除几万,几十万条记录比添加数据要慢很多。这在mysql上比较明显。

如果对数据处理效率要求很高,可以将这部分数据缓存到memcached里,再删除就很快了。就象是硬盘前加一个SSD盘一样。

你是整个表的数据都删除吗?

如果是的话,那建议你不要用 delete命令,而改用 truncate命令。

truncate table 表名

delete命令时要记录大量日志,自然速度要慢很多啦。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10076760.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存