我正在创建一个项目,经常需要使用REPLACE INTO从查询语法中在现有的大约110,000,000条记录的INNODB表中每天更新大约300,000个文件。我一直在研究如何更好地优化这一点并找到START TRANSACTION / COMMIT,但我不确定我是否正确行事。它最好只在多个查询中完成吗?目前我正在这样做,并没有看到真正的好处:
$mysqli->query("START TRANSACTION")or die(mysqli_error($mysqli));
$mysqli->query("REPLACE INTO `TABLE1` (field list) SELECT fields FROM `TABLE2`")or die(mysqli_error($mysqli));
$mysqli->query("COMMIT")or die(mysqli_error($mysqli));
答案 0 :(得分:1)
在事务中包装单个查询没有真正的好处。你可能甚至可以在头上添加几毫秒,但是你插入的数据量不会被注意到。如果您真的担心穿孔,请重新考虑使用REPLACE
REPLACE的工作原理与INSERT完全相同,只是如果在一个旧行中 table与PRIMARY KEY或UNIQUE的新行具有相同的值 index,在插入新行之前删除旧行。
在许多情况下,这可能会导致REPLACE操作比INSERT ON DUPLICATE KEY类型查询慢很多。
答案 1 :(得分:0)
是的,对于像这样的查询,性能没有任何好处。
只有在事务中存在大量单独的插入查询时,才会看到性能提升。