高效运行许多UPDATE语句的最有效的方法和最佳实践方法是什么?目前,我只是创建一个文本块,其中包含许多用分号分隔的UPDATE语句,并将其传递到单个db_query()调用中。
使用这种方法,我目前得到了这个错误,所以我猜这不是一种明智的方法:
PDOException: SQLSTATEHY000:一般错误:2014年在其他未缓冲查询处于活动状态时无法执行查询。考虑使用PDOStatement::fetchAll()。或者,如果您的代码只对mysql运行,则可以通过设置PDO::MYSQL_ATTR_USE_BUFFERED_QUERY属性启用查询缓冲。
有更好的方法吗?我需要运行数百条更新语句。
我为什么要问这么多问题呢?对于每个节点,我跟踪该节点的三个指标。这些指标是以编程方式从其他来源确定的(如流量数据)。为了加快速度,我创建了一个表,它只跟踪nid和三个指标的值。定期地,我必须更新这个表中每个节点的指标。系统中的每个节点都将在此表中有一行。
我从这三个值中确定第四个度量,所以每天我必须:
发布于 2011-11-06 21:35:41
UPDATE语句会改变数据,因此从定义上来说并不快。如果数据集较小,它们可能相对较快,但表越大,更新就会变得越慢,尤其是涉及更新索引和其他内容的时候。
因此,我怀疑如果您单独或在一个调用中执行它们,这会有多大关系。相反,我将研究以更一般的方式“优化”它们的方法:
db_transaction()在单个事务中执行所有查询。这不仅将强制一致性(如果您在500中有一个错误,全部或无)。查询其他更改也将被恢复),它在许多系统上也会更快,因为(在默认配置中) MYSQL在每个事务之后强制对文件系统进行写入(如果您不显式地使用事务,则每个更新/插入/删除查询都被视为一个单独的事务)。如果你能提供更多关于你真正想要做的事情的细节,我也许也能给你一些实际的建议。
编辑:
更多的暗示,现在你发布了你正在做的事情。
https://drupal.stackexchange.com/questions/14891
复制相似问题