InnoDB Small更新速度非常慢,性能问题

时间:2013-12-17 14:58:15

标签: mysql sql performance sql-update innodb

我有一个更新脚本,每晚都会更新我的数据库。

这是一个小型数据库~10k项目。 每个表只有一个快速更新。它在连接表上非常慢。

连接表是Item表和Type表之间的链接,如下所示:

Item.Code <-> JoinTable.RefCode (VARCHAR 30), JoinTable.IdType(int 11) <-> Type.id

引擎是InnoDB。引用表上有两个外键,两列上有唯一键。此外,每列的索引以允许外键。

我正在使用以下SQL查询来更新表:

INSERT INTO JoinTable (id, RefCode, IdType)
   VALUES ( NULL, "AAA", 9584 )
ON DUPLICATE KEY UPDATE
   id = LAST_INSERTED_ID(id),
   refCode = values(refCode),
   refType = values(refType)

因此,对于15k引用的id,它运行大约30分钟的主要问题。

当我使用MyISAM引擎时,它大概是2秒。但没有更多的外键。

据我所知,MyISAM删除了外键并且速度更快但我认为这么小的数据库30分钟远非正常。

你能帮助我提高表现吗?

2 个答案:

答案 0 :(得分:0)

编辑MySQL配置中的InnoDB设置并重新启动MySQL守护程序。他们都以“innodb_”开头,并会解释他们的目的。

我更改了innodb_buffer_pool_size和innodb_log_file_size。

答案 1 :(得分:0)

更改插入以使用IGNORE,并尝试不使用VALUES()

   INSERT IGNORE INTO JoinTable (id, RefCode, IdType)
   VALUES ( NULL, "AAA", 9584 )        
   ON DUPLICATE KEY UPDATE
   id = LAST_INSERTED_ID(id),
   refCode = refCode,
   refType = refType

也可能是你的innodb缓冲区大小很小。