我正在尝试更新表格中的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) {
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();
}
?>
答案 0 :(得分:0)
尝试在id上添加索引。
<p>
答案 1 :(得分:0)
对于插入,您只能在一个语句中对多个插入进行分组,从而提高了性能。在这种情况下,我找到的唯一解决方案是: 1)如果你知道会有重复的结果,则会对重合结果进行分组,这样你就可以按结果($ ids [$ y] [] = $ newId)将分组的id保存在数组中,然后每组内爆并执行一次(更新xxx,其中id为(implode(&#39;,&#39;,$ ids [$ y]))。但是当它们浮动时,我不确定它是否会起作用,或者如果它会缩短插入时间。
2)其他可能的改进可能是在文件中写句子(每500个语句执行一次file_put_contents,不要忘记使用FILE_APPEND)然后从mysql控制台执行文件加载&gt; source /我的/文件/路径;
后一种解决方案更简单,它可能会改善你的表现,而前者则不然。