我有一个更新脚本,每晚都会更新我的数据库。
这是一个小型数据库~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分钟远非正常。
你能帮助我提高表现吗?
答案 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缓冲区大小很小。