簡體   English   中英

在單個查詢中組合2個更新查詢 - 性能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM