我有一个内容类型,其中包含超过 250000 个我想要删除的节点。通过“查看批量操作”进行删除需要很长时间(2 天以上)并且会出现错误。有没有更快的方法可以直接通过数据库来完成此操作。例如,我可以清空数据库中包含该内容类型中的字段的所有表吗?我觉得删除它们的速度会快 100 倍,但这会导致我的网站直接从数据库执行删除操作时出现问题吗?
最佳答案
激活 Devel 的查询日志记录功能模块。删除一个节点。查看为要删除的节点执行了哪些查询。这应该可以让您很好地了解删除节点需要做什么,包括由钩子(Hook)执行的查询。
您可能还想查看node_delete_multiple()
查看节点删除期间执行了哪些其他操作(例如重建搜索索引)。
要了解存在哪些相关的钩子(Hook)实现,您可以破解 module_invoke_all()
记录对 hook_node_delete
和 hook_entity_delete
的调用,并检查它们是否执行除执行数据库查询之外的其他任务。
有了这些信息,您就可以编写 PHP 脚本或 Drush比调用 node_delete_multiple()
更有效地删除多个节点的命令多次。特别是引导 Drupal 不需要完成(或者至少不需要那么频繁)。
另一方面,Drush 命令只调用 node_delete_multiple()
在前 50 个相关节点上,直到所有相关节点都消失为止,实现速度更快。为了节省开发时间,接受增加的处理时间可能是值得的。
关于mysql - 直接从数据库删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19349731/