代码之家  ›  专栏  ›  技术社区  ›  Joshua Martell

分区会提高MySQL的插入速度吗?

  •  8
  • Joshua Martell  · 技术社区  · 15 年前

    我在MySQL5.0上通过加载数据进行了大量的插入。在多次插入之后,比如说几亿行(innodb、pk+a非唯一索引、64位Linux 4GB RAM、raid 1),插入速度会大大减慢,并出现IO限制。如果数据流入单独的分区表,mysql 5.1中的分区是否有可能提高性能?

    4 回复  |  直到 11 年前
        1
  •  3
  •   Wayne Hartman    12 年前

    先前的回答是错误的,他认为这会降低性能。恰恰相反。

    下面是一篇冗长但内容丰富的文章,以及为什么以及如何在MySQL中进行分区:

    http://dev.mysql.com/tech-resources/articles/partitioning.html

    如前所述,分区通常用于将类似的数据分组在一起。这样,当您决定归档或完全销毁一个分区时,您的表就不会变得支离破碎。然而,这并不影响性能,实际上可以提高性能。看吧,不仅仅是删除,片段、更新和插入也可以做到这一点。通过对数据进行分区,您将指导RDBMS操作和查询数据的标准(不明确)。

        2
  •  1
  •   Slashterix    15 年前

    编辑: 无声的歌是正确的。禁用/启用键仅适用于myisam,而不是innodb。我不知道,但我去看了医生。 http://dev.mysql.com/doc/refman/5.1/en/alter-table.html#id1101502 .

    更新任何索引都可能会减慢速度。您可以在执行更新时禁用索引并将其重新打开,以便可以为整个表生成一次索引。

    ALTER TABLE foo DISABLE KEYS;
    LOAD DATA INFILE ... ;
    ALTER TABLE ENABLE KEYS;
    

    这将导致索引一次更新而不是每行更新一次。这也会导致更均衡的btree索引。

        3
  •  0
  •   taohe    11 年前

    MySQL5.6没有改进

    “MySQL可以应用分区修剪来选择、删除和更新语句。当前无法修剪INSERT语句。“

    http://dev.mysql.com/doc/refman/5.6/en/partitioning-pruning.html

        4
  •  -5
  •   kolypto    15 年前

    如果列插入检查(例如主键)被索引,那么这只会降低速度:MySQL将不得不另外决定分区。

    只有添加索引才能改进所有查询。当您有大量很少使用的非常旧的数据(如年份<2000)时,分区很有用:那么为该数据创建一个分区就更好了。

    干杯!