MySQL" UPSERT"并删除不受影响的行

时间:2015-02-02 11:20:10

标签: mysql performance upsert

我在MySQL中有一个表,每晚都有一个cron任务更新。 每行都被更改,因为我从XLS文件获取数据并且必须更新所有值。

起初我的问题是,是否值得更新每一行,或者另一方面只需删除所有并再次插入。我坚持使用UPSERT方法,因为我阅读的内容更加充足,快速,甚至优雅,丢失了所有数据,但如果我错了,请纠正我。

好吧,现在我的问题是关于不是新的行,每次cron运行时都不会更新。 XLS可能没有固定长度,所以有一天可能会减少几行......或更多。

如何在同一" UPSERT"中删除这些行?声明吗

修改的: 我意识到可能在这种情况下最好丢弃旧数据并重新添加它们,尽管起初我的目标是避免这种情况。

2 个答案:

答案 0 :(得分:1)

由于每次都更新所有行并且你无法检查无变化行?  如何简单地截断&批量插入所有?

答案 1 :(得分:0)

甚至优于DROPping或TRUNCATEing如下。这是因为停机时间为零。

CREATE TABLE new LIKE real;
LOAD DATA or otherwise do bulk INSERT into `new`
RENAME TABLE real TO old, new TO real;
DROP TABLE old;

我喜欢把old交给我,直到我有机会确认批量加载没有以某种方式愚蠢而且放松一切。

表被阻止的唯一时间是在RENAME期间,但这是如此之快,我说“零停机时间”。