In SQL, is UPDATE always faster than DELETE+INSERT?
我已经为该线程阅读了UPDATE,并且比INSERT和DELETE更有效 我正在考虑将行更新为除主键ID之外的NULL值,而不是将行删除 然后,任何新数据都可以简单地用保留的primary_key ID填充该行,这可能有什么问题,这是提高效率的好方法吗?
答案 0 :(得分:2)
该方法通常取决于您在哪里拥有OLAP(分析)或OLTP(事务)应用程序。
在OLTP应用程序中,通常在多个事务下同时更改一个表的多个记录,每个事务很小。在这里,您应该通过记录的PK或具有索引的任何其他键来更新记录。
在OLAP应用程序中,通常在一次ELT期间,表的很大一部分会被一个(或有时是几个不重叠的)事务所更改。在这里,delete + insert效率更高。通常,您会更改许多列值,因此一次可以更改整个行。由于更改了许多行,因此全表扫描优先于索引访问。
答案 1 :(得分:1)
除非您正在大规模构建应用程序,并且已经 已经观察到 ,否则该特定查询的数据库性能将成为瓶颈,并且 已经验证了 从该方案中获得的性能提升,请不要过分考虑。
MySQL几乎可以在几乎所有情况下有效地使您的查询有效地工作。在某些时候和地方,您需要进行大量优化,以至于您可能需要检查是否将现有行用于新记录是否会提高效率,但是如果您处在那些时候和地点之一,那么您将已经完成了基准测试。
如果您没有令人信服的理由,请使用DELETE
删除内容,使用INSERT
插入内容,并使用UPDATE
更新内容。
答案 2 :(得分:0)
INSERT
,UPDATE
,DELETE
中的任何一个都必须在行所在的块中处理所有事情。