Mysql InnoDB插入速度太慢了?

时间:2012-08-07 20:39:53

标签: mysql innodb insertion

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

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

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

有没有办法加快这些插入的效果?

------编辑--------

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

3 个答案:

答案 0 :(得分:2)

您使用了哪个主键?

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

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

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

答案 1 :(得分:1)

首先,执行INSERTs中的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

答案 2 :(得分:0)

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

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

或尝试使用程序