我已经在下面看到了一些有关此问题的问题 MySQL “good” way to insert a row if not found, or update it if it is found
现在我有一个汇总表,每次说出售都会更新数量。因此,只有第一次执行插入时,项目的1000次销售中,其余时间才会更新。我的理解是Insert on Duplicate Key Update
它首先尝试插入,如果更新失败。所以999次插入都不成功
1)是否有方法首先检查更新,如果没有更新,则插入单个语句?
2)考虑到大多数情况下更新将是成功的,以下哪种方法是可取的
a)使用Insert on Duplicate Key Update
b)呼叫更新;如果没有行影响调用插入
现在我正在使用第二个选项(b)。性能增益在这里非常重要,我也在测试第一个选项。生病后发现结果
答案 0 :(得分:0)
INSERT ON DUPLICATE KEY UPDATE
是要走的路。它不执行完整插入或如何放置它
要使此语句起作用,表中必须有主键或唯一键,并且必须在语句中包含相应的列。
在确定是否必须执行插入或更新语句之前,检查所述密钥。这通常很快。
用你的"先更新"接近你什么也得不到,没有变得更糟。无论如何必须完成主键查找。在最糟糕的情况下,你不得不两次查找主键浪费时间。首先是update语句(可能没有必要),然后是insert语句。