2

我在 Mysql 中有一个 InnoDb 表,它需要非常快速地处理插入(其他一切都可以随心所欲)。该表没有关系或索引一个自动递增的 id 和一个时间戳。

我从多个客户端运行脚本以在分配的时间内插入尽可能多的记录(循环插入)并计算每秒的插入次数。

我平均每秒只能插入 200 次,而我需要大约 20000 次。性能不会随着运行脚本的客户端数量或运行脚本的机器的数量而改变。

有什么方法可以加快这些插入的性能吗?

- - - 编辑 - - - -

感谢你的帮助。我无法将任何插入组合在一起,因为当我们启动时,所有插入都将来自多个连接。我最终将该表的引擎切换到 MyISAM,每秒的插入量立即飙升至 40,000。

4

3 回答 3

2

您使用了哪个主键?

InnoDB 使用聚集索引,因此所有数据的顺序与其主键索引相同。

如果您不使用自动增量类型的主键,那么它会为每个插入进行大型磁盘操作。它推送所有其他数据并插入新元素。

如需更多参考,请尝试检查http://dev.mysql.com/doc/refman/5.0/en/innodb-table-and-index.html

于 2012-09-22T23:20:35.333 回答
1

首先,执行INSERTsin a TRANSACTION

START TRANSACTION;

INSERT ...

COMMIT;

其次,将多行批处理成一个INSERT语句:

START TRANSACTION;

INSERT INTO table (only,include,fields,that,need,non_default,values) VALUES
(1,1,1,1,1,1,1),
(2,1,1,1,1,1,1),
(3,1,1,1,1,1,1),
...;

COMMIT;

最后,如果输入数据的格式正确,您可能会发现LOAD DATA INFILE性能优于。INSERT

于 2012-08-07T20:45:47.167 回答
0

例如,我建议在一个查询中尝试多个插入

INSERT INTO table 
   (title, description) 
VALUES 
   ('test1', 'description1'), 
   ('test2', 'description2'), 
   ('test3', 'description3'), 
   ('test4', 'description4')

或尝试使用程序

于 2012-08-07T20:44:06.550 回答