对于某个业务逻辑,序列可以是两个单独的更新,也可以是删除后跟插入。基本上,更新会使列无效,所以我可以使它看起来像删除。我不关心丢失行(因此不需要软删除):什么是更有效的方法?
答案 0 :(得分:1)
对他们进行基准测试。不要忘记对表格上的其他查询进行基准测试。
更好的是,选择哪一个导致最合理的数据模型。
答案 1 :(得分:1)
更新通常比删除/插入更快。 MySQL performance DELETE or UPDATE?
答案 2 :(得分:1)
最适合衡量,但它有助于了解磁盘级别发生的情况。以下是概念上发生的事情:
如果更新是针对不在索引中的列,则可以在单个写入中“就地”完成更新,除非记录增长(如果您正在软删除字段,则不太可能) 。如果列已编制索引,则会写入这些索引以删除旧值并添加新值。
当你删除时,会有一个写入从其索引中删除删除记录的主键,并写入从二级索引中删除任何二级密钥。
当你插入时,会有你要添加的记录的写入,一个或多个写入将主键转换为索引(索引页可能会拆分,需要多次写入),并写入以获取任何辅助键进入他们的指数。
答案 3 :(得分:0)
这在很大程度上取决于查询的性质。也许您的两个更新可以写为更新连接,并且比删除和插入更快。如果您的表上有索引,则删除和插入将更多更昂贵。如果它是一个可变长度列,则删除和插入可能更快。
有很多因素可以参与其中。最好的办法是对其进行基准测试并使用explain
来确定数据库对每个查询的确切作用。
答案 4 :(得分:0)
听起来,从数据完整性的角度来看,最好使用删除然后插入。
删除不需要的数据显然比保留数据要便宜。
就实际速度而言,除非进行剖析,否则我认为它可以忽略不计。