我有一个包含500-5000行的文件,我想保存到我的数据库中。 这里的困难是,我还需要更新旧数据 - 不仅仅是插入。
所以我尝试了不同的方法:
ON DUPLICATE KEY UPDATE
(非常慢但符合我的需求)LOAD DATA INFILE
(非常快但覆盖/忽略所有内容)我无法使用第一种方法将500行写入数据库。整个过程需要~25-30秒,这是很长的路要走。其他两种方法都很快(只有1-2秒),但会覆盖我需要更新的旧数据。
更新包含简单递增计数器和插入新时间戳。 所以第一种方法的查询如下:
INSERT INTO `latest`
( `hash`,`first_try`,`last_try`, `count_tries`, `sender` )
VALUES
( :hash, :first, :last, 1, :sender )
ON DUPLICATE KEY UPDATE
`count_tries` = `count_tries` + 1,
`last_try` = :last2
我也不知道有100次插入的可能性(我在第二种方法中尝试过)。
您是否知道有可能加快每行一行的查询速度,或者使用ON DUBLICATE KEY
多次插入?
任何其他具有相同结果的方法也都很好!
答案 0 :(得分:1)
将文件加载到具有与原始表相同的模式的临时表中。然后做:
INSERT INTO latest ( `hash`,`first_try`,`last_try`, `count_tries`, `sender` )
SELECT `hash`,`first_try`,`last_try`, `count_tries`, `sender` FROM temp_latest
ON DUPLICATE KEY UPDATE
count_tries = count_tries + 1,
last_try = VALUES(last_try)
在ON DUPLICATE KEY UPDATE
子句中,VALUES(col)
包含存储在该列中的值,如果它不是重复的话。