代码之家  ›  专栏  ›  技术社区  ›  Aleksandar Vucetic

MySQL性能删除或更新?

  •  8
  • Aleksandar Vucetic  · 技术社区  · 16 年前

    我有一张超过10^7行的Myisam表。在向其中添加数据时,我必须在末尾更新~10行。删除它们然后插入新的行更快,还是更新这些行更快?应更新的数据不是索引的一部分。索引/数据碎片怎么样

    5 回复  |  直到 15 年前
        1
  •  21
  •   Quassnoi    16 年前

    UPDATE 快得多。

    当你 更新 ,表记录正被新数据重写。

    当你 DELETE ,应该更新索引(记住,删除整行,而不仅仅是需要修改的列),并且可以移动数据块(如果单击 PCTFREE 极限)

    所有这些都必须在 INSERT .

    所以你应该经常使用

    INSERT ... ON DUPLICATE KEY UPDATE
    

    而不是 REPLACE .

    前一个是 更新 发生密钥冲突时的操作,而后一个操作是 删除 / 插入 .

        2
  •  4
  •   Nadia Alramli    16 年前

    更新速度更快。也可以在重复的密钥更新中使用insert

    INSERT INTO table (a,b,c) VALUES (1,2,3)
      ON DUPLICATE KEY UPDATE c=c+1;
    

    有关详细信息,请阅读更新 documentation

        3
  •  2
  •   randomx    15 年前

    我将考虑分区,而不是为了性能而删除或更新数据。

    http://dev.mysql.com/doc/refman/5.1/en/partitioning-range.html

    这将允许您保留历史数据,而不会降低性能。

        4
  •  1
  •   Paul G.    16 年前

    逻辑删除+添加=2个操作,更新=1个操作。同时删除和添加自动递增的新更改记录ID,因此如果这些记录具有将被破坏的关系,或者也需要更新。我去更新一下。

        5
  •  0
  •   DForck42    16 年前

    只要搜索条件在索引中,使用update where column='something'应该使用索引(无论是搜索还是扫描都是完全不同的问题)。

    如果您经常进行这些更新,但在“条件”列上没有索引,我建议您在正在使用的列上创建索引。这应该有助于加快速度。