Mysql
Replace vs If exists update else insert vs update if row_count()=0 insert 的性能
我的表結構是:
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的工作量會減少。