检查是否存在多于1个唯一约束时的优化?

时间:2015-12-26 22:54:55

标签: mysql optimization unique-constraint

我正在尝试在检查是否已经使用用户名或电子邮件时优化此查询。

更优化,因为我相信可以创建一个查询来实现这个目标吗?

select
(select count(Username) from User where Username = @Username) > 0 as "UsernameExist"
(select count(Email) from User where Email = @Email) > 0 as "EmailExist"

下面的查询不起作用,因为如果用户名和电子邮件是针对不同的用户,我仍然会得到1个

select count(Username), count(Email)
from User
where Username = @Username or Email = @Email

1 个答案:

答案 0 :(得分:0)

它被称为条件计数,你可以使用sum()或count()和条件语句作为参数。我将用sum()给你一个例子:

select sum(if(Username=@Username,1,0)), sum(if(Email=@Email,1,0))
from User
where Username = @Username or Email = @Email

您可以在sum()中使用case语句而不是if()函数。

但是,我不确定这种方法是否比使用多个查询更有效。老实说,我会使用您在原始查询中作为子查询的2个查询的并集。