什么是更好的选择?使用IN运算符还是EXISTS运算符?在性能和服务器负载方面。数据库中的IN和/或EXISTS运算符是否有任何支持因子(如索引,约束或其他)?
以下是使用IN和EXISTS的示例查询
SELECT * FROM Customers WHERE Customer_ID IN (SELECT Cust_ID FROM Sales);
和
SELECT Customer_ID FROM Customers WHERE EXISTS (SELECT Cust_ID FROM Sales);
如果两个查询不同,那么计算或列出客户的更好方法是什么?或者如果查询更复杂,如下所示。
SELECT sub_id FROM subscription
WHERE start_date = CURDATE()
AND end_date > CURDATE()
AND sub_id NOT IN (SELECT DISTINCT sub_id FROM subscription
WHERE start_date < CURDATE());
是否可以用NOT EXISTS替换NOT IN运算符?在这种情况下,用NOT EXISTS重写上面的查询是更好还是什么?
答案 0 :(得分:4)
这两个查询做了不同的事情。您可能打算使用EXISTS
的相关子查询:
SELECT Customer_ID c
FROM Customers c
WHERE EXISTS (SELECT 1 FROM Sales s WHERE s.Cust_ID = c.Customer_Id);
这两种方法都可以表达你的逻辑。我倾向于选择EXISTS
有两个原因:
NOT EXISTS
通常是比NOT IN
更好的选择,因为它处理NULL
的方式。这不适用于EXISTS
/ IN
,但会溢出。EXISTS
通常不会比IN
差。 答案 1 :(得分:0)
您可以使用它们,但在检查是否有条件语句时,通常会使用exists
关键字。
In
关键字通常与列表比较一起使用。
此外,正如jarlh所说,您可以使用in
替换join
。