首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行此更新查询的最佳方法

执行此更新查询的最佳方法
EN

Stack Overflow用户
提问于 2015-02-18 13:51:24
回答 1查看 75关注 0票数 0

我必须对800 k行进行更新查询,并寻找最佳方法。除一个字段外,所有行都使用相同的值进行更新(在我的示例中为D)。这个字段可以是1或0。我使用Zend_Db的update()方法。我想出三种方法来做到这一点:

  • Methode 1:更新每一行,一个接一个地更新(带有一个foreach)。
  • Methode 2:在更新中执行IF设置字段的值
  • 方法3:将行分成两组(一组为字段=1,另一组为字段= 0),并进行两次更新(更新.其中id IN (.),每个组一个。

查询如下:

代码语言:javascript
复制
$a_data = array(
  'A' => foo,
  'B' => 99,
  'C' => 0,
  'D' => (0 OR 1 ?)
);

$where['id IN (?)'] = $a_id;
$update = $this->_db->update($this->_name, $a_data, $where);

巫术可以是最好的方法吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-18 14:19:27

对于记录而言,在实时生产服务器上更新800 k行并不是一个好计划。除了在实际mysql级别上执行之外,此更新停止服务器的可能性很高。

这么说吧,假设你在运行MySql,

方法1.是不可行的,如果只是因为您有800 k行=> 800 k查询。max_timeout in php.ini将不允许脚本运行那么长时间。如果您还想尝试,请尝试将结果拼接成50-100-200的批处理(取决于您的服务器配置),并运行每个批处理,并在它们之间有时间差。做一批,等一等,做一批,等一下,等等……

方法2. --我想它与您的某些问题有关,但是它会更快一些。

方法3.见方法1的答案,只是它不是一次800 k,而是取决于您的0和1之间的比率。每个查询都很大。

通常,当出现这样的大型批处理更新时,我会说,在命令行中使用mysql。如果这是您正在运行的update php脚本,最好的结果是拼接结果并更新50-100--不管每次更新多少。虽然这很费时(每次800.000行/100行= 800次运行脚本+在每一次更新的批处理之后暂停一秒钟)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28585297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档