Mysql

Replace vs If exists update else insert vs update if row_count()=0 insert 的性能

  • December 5, 2017

我的表結構是:

Id           int(11)        NO     PRI      auto_increment
Mobile       varchar(10)    NO          
LoanAmount   int(11)        NO          

我想更新現有的 Mobile 否則 INSERT 新條目。

我嘗試了什麼?

  • 使用 REPLACE 因為沒有外鍵約束
  • IF EXISTS (SELECT 1 FROM table WHERE Mobile='SomeValue') UPDATE ... WHERE Mobile=v_mobile ELSE INSERT INTO table ...
  • UPDATE table SET (...) WHERE Mobile='SomeValue' IF ROW_COUNT()=0 INSERT INTO table.person (...) VALUES (...)

在性能或未來維護方面哪個最好?

通常答案很簡單“哪個向伺服器發送更多請求”。

  • 碘代克 - 1
  • 更換 - 1
  • EXISTS - 2(SELECT,加上 UPDATE 或 INSERT)
  • ROW_COUNT - 1 或 2(ROW_COUNT 不計算在內)

但我們與該指標有聯繫。因此,讓我們剖析獲勝者:

  • IODKU - 找到行,決定做什麼,然後去做。
  • 替換 - 刪除與任何唯一(或主)鍵匹配的所有行,然後插入。

感覺IODKU的工作量會減少。

引用自:https://dba.stackexchange.com/questions/192184