mysql - 直接从数据库删除节点

标签 mysql drupal drupal-7 nodes

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

最佳答案

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

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

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

有了这些信息,您就可以编写 PHP 脚本或 Drush比调用 node_delete_multiple() 更有效地删除多个节点的命令多次。特别是引导 Drupal 不需要完成(或者至少不需要那么频繁)。

<小时/>

另一方面,Drush 命令只调用 node_delete_multiple()在前 50 个相关节点上,直到所有相关节点都消失为止,实现速度更快。为了节省开发时间,接受增加的处理时间可能是值得的。

关于mysql - 直接从数据库删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19349731/

相关文章:

mysql - 复合主键和另一个属性的外键

linux - 货车不工作

drupal - 以编程方式获取和设置字段值

php - Drupal 7 - 使用 PHP Curl 为用户更新服务

php - SELECT 中的 mySQL 空 SELECT 不应为整个查询返回 null

mysql - 如何在 MariaDB 中创建函数/过程以在访问表时运行更新脚本?

php - 表单数据未插入数据库

drupal - 如何使用基本页面的别名作为上下文过滤器

drupal - drupal 6下上传图片显示错误

php - 如何在 Drupal 7 中管理预告片及其图像字段?