0

我有一个包含超过 250000 个要删除的节点的内容类型。通过查看批量操作删除需要很长时间(2 天以上)并且会出现错误。有没有更快的方法可以直接通过数据库执行此操作。因此,例如,我可以只清空数据库中包含该内容类型中的字段的所有表。我觉得删除它们的速度会快 100 倍,但它会导致我的网站直接从数据库中删除吗?

4

1 回答 1

0

激活开发模块的查询日志功能。删除一个节点。查看为要删除的节点执行了哪些查询。这应该可以让您很好地了解删除节点需要做什么,包括由钩子执行的查询。

您可能还想看看在node_delete_multiple()删除节点期间执行了哪些其他操作(例如重建搜索索引)。

要了解存在哪些相关的钩子实现,您可以module_invoke_all()记录调用hook_node_deletehook_entity_delete检查它们是否执行除了执行数据库查询之外的其他任务。

有了这些信息,您可以编写一个 PHP 脚本或Drushnode_delete_multiple()命令,它比多次调用更有效地删除多个节点。尤其是不需要进行引导 Drupal(或者至少不需要那么频繁)。


另一方面,仅调用node_delete_multiple()前 50 个有问题的节点直到所有相关节点都消失的 Drush 命令执行起来更快。可能值得接受增加的处理时间以节省开发时间。

于 2013-10-13T20:29:00.763 回答