我有一張需要定期更新的表格。這些更新分批發生。與INSERT不同,我不能在單個查詢中包含多行。我現在所做的是準備UPDATE語句,然後遍歷所有可能性並執行每個可能性。當然,準備工作只發生一次,但仍有很多處決。有沒有一種巧妙的方法來彌補MySQL的更新?
我創建了不同大小的表的幾個版本(認爲可能更好的索引或拆分表會有所幫助)。但是,這對更新時間沒有影響。對於1,000行或500,000行,100次更新大約需要4秒。
有更明智的方法可以更快地做到這一點嗎?
正如評論中所述,這裏是我一直在測試的實際代碼(PHP)。列'id'是主鍵。
$stmt = $dblink->prepare("UPDATE my_table SET col1 = ? , col2 = ? WHERE id = ?");
$rc = $stmt->bind_param("ssi", $c1, $c2, $id);
foreach ($items as $item) {
$c1 = $item['c1'];
$c2 = $item['c2'];
$id = $item['id'];
$rc = $stmt->execute();
}
$stmt->close();
「100次更新需要4秒」? - 你確定?這是非常差的表現 – 2011-04-22 04:10:28
這可能只是一個網絡問題。實際的代碼和數據庫位於不同的機器上。 – burger 2011-04-22 04:14:46
檢查您的索引。確保無論您將更新語句的where子句放入索引。 – squawknull 2011-04-22 04:18:54