我在使用MySQL 5.0通过LOAD DATA INFILE进行大量的INSERT操作。 在进行许多插入操作之后,比如几亿行(InnoDB,PK +非唯一索引,64位Linux 4GB RAM,RAID 1),插入操作明显变慢,并且出现了IO限制。 如果将数据流向单独的分区表中,MySQL 5.1中的分区是否有可能提高性能?
我在使用MySQL 5.0通过LOAD DATA INFILE进行大量的INSERT操作。 在进行许多插入操作之后,比如几亿行(InnoDB,PK +非唯一索引,64位Linux 4GB RAM,RAID 1),插入操作明显变慢,并且出现了IO限制。 如果将数据流向单独的分区表中,MySQL 5.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索引。
MySQL 5.6 没有改进
"MySQL 可以对 SELECT、DELETE 和 UPDATE 语句应用分区修剪。目前无法修剪 INSERT 语句。"
http://dev.mysql.com/doc/refman/5.6/en/partitioning-pruning.html