【发布时间】:2014-03-20 00:56:36
【问题描述】:
我正在尝试使用以下查询更新我相当强大的数据库(近 300 万行):
$length = strlen($this);
$query = "UPDATE database
SET row_to_update='1'
WHERE row='{$this}'
AND row_length='{$length}'
LIMIT 1";
它从一个文件(很多)中获取单词($this),然后搜索匹配。如果找到,它会将 row_to_update 更新为值 1(将 none 设置为默认值)。
每个 row_length 已经包含某个单元格的长度值,我认为这可能会显着加快处理速度。可惜没有。
它在 8 小时内仅管理约 30k 个查询。至少可以这么说,这很慢!
有什么办法,我可以改进这个低效的代码吗?
【问题讨论】:
-
您是否按行运行此查询?
-
获得了您在
where子句中使用的所有字段的索引?再加上为什么要存储 row_Length 字段?在查询中执行length(somefield)很简单,因为数据库已经“知道”字段内容的长度。 -
虽然你可以连接
$this,这样你就可以对一堆记录运行一次查询吗?例如WHERE row IN ($this_concatinated) AND row_length IN ($length_concatincated) -
@MarcB 我铭记在心,推荐它(row_length),记住 Mark Byers 对我的问题link 最后列出的 cmets 之一
-
@MarcB 还没有索引。需要在该主题上做我的功课(从未做过)。这没什么好骄傲的,但至少我承认了。
标签: php mysql database sql-update bigdata