直接从数据库中删除节点

时间:2013-10-13 20:09:58

标签: mysql drupal drupal-7 nodes

我有一个内容类型,包含我想要删除的超过250000个节点。通过View Bulk Operations删除会占用大量时间(2天以上)并遇到错误。是否有更快的方法直接通过数据库。因此,例如,我可以清空数据库中包含该内容类型中的字段的所有表。我觉得将它们删除速度快100倍但是它会导致我的网站直接在数据库中执行问题吗?

1 个答案:

答案 0 :(得分:0)

激活Devel模块的查询日志记录功能。删除节点。查看要删除的节点执行的查询。这样可以很好地了解删除节点需要做些什么,包括钩子执行的查询。

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

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

使用此信息,您可以编写PHP脚本或Drush命令,与多次调用node_delete_multiple()相比,可以更有效地删除多个节点。特别是引导Drupal不需要完成(或者至少不需要这样做)。


另一方面,在所有相关节点消失之前,只调用前50个节点上的node_delete_multiple()的Drush命令可以更快地实现。可能值得接受增加的处理时间来节省开发时间。