我有一个内容类型,包含我想要删除的超过250000个节点。通过View Bulk Operations删除会占用大量时间(2天以上)并遇到错误。是否有更快的方法直接通过数据库。因此,例如,我可以清空数据库中包含该内容类型中的字段的所有表。我觉得将它们删除速度快100倍但是它会导致我的网站直接在数据库中执行问题吗?
答案 0 :(得分:0)
激活Devel模块的查询日志记录功能。删除节点。查看要删除的节点执行的查询。这样可以很好地了解删除节点需要做些什么,包括钩子执行的查询。
您可能还想查看node_delete_multiple()
以查看在删除节点期间执行的其他操作(例如,重建搜索索引)。
要了解相关钩子实现的存在,您可以通过module_invoke_all()
来记录对hook_node_delete
和hook_entity_delete
的调用,并检查他们是否执行除执行数据库查询之外的其他任务。
使用此信息,您可以编写PHP脚本或Drush命令,与多次调用node_delete_multiple()
相比,可以更有效地删除多个节点。特别是引导Drupal不需要完成(或者至少不需要这样做)。
另一方面,在所有相关节点消失之前,只调用前50个节点上的node_delete_multiple()
的Drush命令可以更快地实现。可能值得接受增加的处理时间来节省开发时间。