要删除的表 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命令时要记录大量日志,自然速度要慢很多啦。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)