分区会提高MySQL INSERT的速度吗?

时间:2009-11-16 03:48:14

标签: mysql

我在MySQL 5.0上通过LOAD DATA INFILE做了很多INSERT。在许多插入之后,比如几亿行(InnoDB,PK +非唯一索引,64位Linux 4GB RAM,RAID 1),插入速度显着减慢并出现IO限制。如果数据流入单独的分区表,MySQL 5.1中的分区是否可能提高性能?

4 个答案:

答案 0 :(得分:3)

之前的答案在他的假设中是错误的,这会降低性能。恰恰相反。

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

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

如上所述,通常使用分区将类似数据分组在一起。这样,当您决定归档或平展销毁分区时,您的表不会变得碎片化。但是,这不会影响性能,实际上可以增加性能。请注意,片段,更新和插入不仅可以删除,还可以执行此操作。通过对数据进行分区,您将指示RDBMS应该操作和查询数据的标准(indeces)。

答案 1 :(得分:1)

修改:SiLent SoNG是正确的。 DISABLE / ENABLE KEYS仅适用于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指数。

答案 2 :(得分:0)

MySQL 5.6没有改进

" MySQL可以对SELECT,DELETE和UPDATE语句应用分区修剪。 INSERT语句目前无法修剪。"

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

答案 3 :(得分:-5)

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

只有通过添加索引才能改进所有查询。当您有大量非常旧的数据(例如年份< 2000)很少使用时,分区很有用:那么为这些数据创建分区会很好。

干杯!