繁体   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