[英]Combine 2 update querys in a single query - performance
我正在編程一個喜歡的功能
例如,我們有多個地址,可以選擇一個作為收藏。
目前我有2個問題要做這個工作:
UPDATE userdata
SET maindata = 0
WHERE
cid = :id;
UPDATE userdata
SET maindata = 1
WHERE
cid = :id AND id = :id2
LIMIT 1
在第一個查詢中,我將所有地址設為“不喜歡”,而在第二個查詢中,我將新選擇的地址設為最喜歡的地址。
有沒有辦法改變這個查詢或重寫為1? 甚至是更好的解決方案?
如果您想要單個查詢,則可以使用案例(或if)
update userdata
set maindate = case when id = :id2 then 1
else 0 end
where cid = :id;
性能確保您對userdata列(cid,id)有適當的索引
並且掃描的行數對於第一個小門應該是相同的..但是這樣你就避免了第二個...
最終嘗試創建一個復合索引
create index myidx1 on userdata(cid, id)
UPDATE userdata SET maindata = (case when cid = id AND id = id2 then 1 else 0 end);
這會有所幫助。 我不確定你的查詢,但這會有所幫助。 如果你看到不同的東西,讓我知道......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.