Php 如何优化MySQL更新请求?
我正在尝试更新表中的100K行。但是查询执行得非常慢。 有些数学函数不在SQL中,因为使用了PHP,例如Php 如何优化MySQL更新请求?,php,mysql,Php,Mysql,我正在尝试更新表中的100K行。但是查询执行得非常慢。 有些数学函数不在SQL中,因为使用了PHP,例如asinh <?php $n = pow(2, 6); $sql = ""; $dsn = 'mysql:host=localhost;dbname=****'; $user = '****'; $password = '****'; try { $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e)
asinh
<?php
$n = pow(2, 6);
$sql = "";
$dsn = 'mysql:host=localhost;dbname=****';
$user = '****';
$password = '****';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo $e->getMessage();
}
try {
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->beginTransaction();
$stmt = $dbh->query('SELECT id, lat FROM data');
while ($row = $stmt->fetch())
{
$idRow = $row['id'];
$latRow = $row['lat'];
$y = floor(1 - asinh(tan(deg2rad($latRow))))/2*$n;
$sql .= " UPDATE data_update";
$sql .= " SET ySet= '" . $y . "'";
$sql .= " WHERE ";
$sql .= "id = " . $idRow . "; ";
}
$dbh->exec($sql);
} catch (Exception $e) {
$dbh->rollBack();
echo $e->getMessage();
}
?>
尝试在id上添加索引
ALTER TABLE`data\u update`添加主键(`id`);
对于插入,您可以在一条语句中对多个插入进行分组,从而大大提高了性能。在这种情况下,我找到的唯一解决方案是:
1) 分组一致性结果如果您知道将有重复的结果,那么您可以按结果($ids[$y][]=$newId)将分组的id保存在数组中,然后对每个组内爆并执行一次(更新xxx,其中id在其中(内爆(',',$ids[$y])).但由于它们是浮动的,我不确定这是否会起作用,或者这是否会减少插入的时间
2) 其他可能的改进可以是将句子写在一个文件中(每500条语句执行一个文件内容,不要忘了使用file\u APPEND),然后从mysql控制台以>source/my/file/path的形式执行文件加载
后一种解决方案更简单,可能会提高您的性能,而前一种解决方案则不然。启动前10K,然后启动下一个10K,依此类推……分解该公式的作用,并在sql中实现它。