更新与删除和插入

时间:2019-12-22 02:00:51

标签: mysql sql database

In SQL, is UPDATE always faster than DELETE+INSERT?

我已经为该线程阅读了UPDATE,并且比INSERT和DELETE更有效 我正在考虑将行更新为除主键ID之外的NULL值,而不是将行删除 然后,任何新数据都可以简单地用保留的primary_key ID填充该行,这可能有什么问题,这是提高效率的好方法吗?

3 个答案:

答案 0 :(得分:2)

该方法通常取决于您在哪里拥有OLAP(分析)或OLTP(事务)应用程序。

在OLTP应用程序中,通常在多个事务下同时更改一个表的多个记录,每个事务很小。在这里,您应该通过记录的PK或具有索引的任何其他键来更新记录。

在OLAP应用程序中,通常在一次ELT期间,表的很大一部分会被一个(或有时是几个不重叠的)事务所更改。在这里,delete + insert效率更高。通常,您会更改许多列值,因此一次可以更改整个行。由于更改了许多行,因此全表扫描优先于索引访问。

答案 1 :(得分:1)

除非您正在大规模构建应用程序,并且已经 已经观察到 ,否则该特定查询的数据库性能将成为瓶颈,并且 已经验证了 从该方案中获得的性能提升,请不要过分考虑。

MySQL几乎可以在几乎所有情况下有效地使您的查询有效地工作。在某些时候和地方,您需要进行大量优化,以至于您可能需要检查是否将现有行用于新记录是否会提高效率,但是如果您处在那些时候和地点之一,那么您将已经完成了基准测试。

如果您没有令人信服的理由,请使用DELETE删除内容,使用INSERT插入内容,并使用UPDATE更新内容。

答案 2 :(得分:0)

  • 一个语句比两个语句快。 (通常)
  • INSERTUPDATEDELETE中的任何一个都必须在行所在的块中处理所有事情。
  • 让“空”行等待可能的替换没有好处。
  • 避免“过早优化”。
  • 另请参见`INSERT ... ON DUPLICATE KEY UPDATE ...”(又名“ IODKU”或“ upsert”)