与MYISAM相比,mysql在插入过程中使用InnoDB的速度较慢

与MYISAM相比,mysql在插入过程中使用InnoDB的速度较慢,mysql,performance,logging,insert,innodb,Mysql,Performance,Logging,Insert,Innodb,我刚刚安装了MySQL 5.5,它有InnoDB默认引擎,实现了插入查询,速度非常慢!禁用常规日志后,它得到了一些改进,但仍然非常缓慢。我正在分析mysql以找到问题,但没有机会 下面是比较这一点的基准: 使用500行测试(n)MYISAM表。 -每秒插入5866次。 -每秒读取128866行。 -每秒更新56306次 使用500行测试一个(n)INNODB表。 -每秒插入9次。 -每秒读取28539行。 -每秒更新4358次 与MyISAM的5866相比,我在InnoDB上有9个insert查

我刚刚安装了MySQL 5.5,它有InnoDB默认引擎,实现了插入查询,速度非常慢!禁用常规日志后,它得到了一些改进,但仍然非常缓慢。我正在分析mysql以找到问题,但没有机会

下面是比较这一点的基准:

使用500行测试(n)MYISAM表。 -每秒插入5866次。 -每秒读取128866行。 -每秒更新56306次

使用500行测试一个(n)INNODB表。 -每秒插入9次。 -每秒读取28539行。 -每秒更新4358次

与MyISAM的5866相比,我在InnoDB上有9个insert查询

这是我的my.ini(windows 8 64位):


我编辑这个文件是为了获得高性能,mysql 5.1也从来没有遇到过任何问题。按照要求,登录提交级别通常会导致大量磁盘压力,从而大大降低了inno mysql实例上的数据吞吐量

将mysql.ini设置为
innodb\u flush\u log\u at\u trx\u commit=0
(或2)通常可以解决此问题


请注意,ACID规则希望该值为1…

您也可以使用以下命令直接在MySQL命令行上设置它:

SET GLOBAL innodb_flush_log_at_trx_commit = 0;

是否一次添加一行

如果您为每个事务添加多行,这将大大有助于

# 1:
INSERT INTO my_table VALUES (1, "A");
INSERT INTO my_table VALUES (2, "B");

# 2:
INSERT INTO my_table VALUES (1, "A"),(2, "B");

# 3:
BEGIN;
INSERT INTO my_table VALUES (1, "A");
INSERT INTO my_table VALUES (2, "B");
COMMIT;
在InnoDB中,2和3将比1快得多


#2对MyISAM也有帮助,但没有那么多。粗略的数字,我已经看到它将MyISAM的速度提高了2倍,将InnoDB的速度提高了100倍。

您应该查看一下
InnoDB\u flush\u log\u at\u trx\u commit=0
-应该可以大大加快速度(编辑,也许2也可以工作,因为它可以减轻磁盘I/O的压力)更新到mysql 5.5或mysql 5.6怎么样?我把它改成了2,它得到了修复!现在是5615页。这样一个小小的改变怎么会产生如此巨大的变化呢?我永远也不知道:D非常感谢你:)@Najzero:你可以发布这个答案,这样我就可以将它标记为正确(我无法回答我自己的问题,而不是足够的代表:/)在将innodb_flush_log_在_trx_commit设置为0后,你能分享这个基准吗
# 1:
INSERT INTO my_table VALUES (1, "A");
INSERT INTO my_table VALUES (2, "B");

# 2:
INSERT INTO my_table VALUES (1, "A"),(2, "B");

# 3:
BEGIN;
INSERT INTO my_table VALUES (1, "A");
INSERT INTO my_table VALUES (2, "B");
COMMIT;