在一个查询中合并2个更新查询-性能

时间:2019-04-17 14:14:51

标签: mysql performance database-performance 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?甚至是更好的解决方案?

2 个答案:

答案 0 :(得分:2)

如果您要查询单个查询,则可以使用case when(或if)

update  userdata 
set maindate = case when id = :id2 then 1 
                else 0 end 
where  cid = :id;

为了提高性能,请确保您在userdata列(cid,id)上具有正确的索引

并且第一个wuary ..的扫描行数应该相同,但是这样可以避免第二个..

最终尝试创建一个复合索引

 create index myidx1 on userdata(cid, id)

答案 1 :(得分:1)

NULL

这将有所帮助。我不确定您的查询,但这会有所帮助。让我知道您是否看起来与众不同...