检查是否存在超过 1 个唯一约束时进行优化?
Optimization when checking existence of more than 1 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
这称为条件计数,您可以使用 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 个查询的联合作为原始查询中的子查询。
我在检查用户名或电子邮件是否已被占用时,正在尝试优化此查询。
更加优化,因为我相信可以创建一个查询来实现这一点?
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
这称为条件计数,您可以使用 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 个查询的联合作为原始查询中的子查询。