我必须对800 k行进行更新查询,并寻找最佳方法。除一个字段外,所有行都使用相同的值进行更新(在我的示例中为D)。这个字段可以是1或0。我使用Zend_Db的update()方法。我想出三种方法来做到这一点:
查询如下:
$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);巫术可以是最好的方法吗?谢谢
发布于 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次运行脚本+在每一次更新的批处理之后暂停一秒钟)。
https://stackoverflow.com/questions/28585297
复制相似问题