【发布时间】:2017-07-21 10:34:32
【问题描述】:
什么是更好的选择?使用 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 IN 运算符替换为 NOT EXISTS?在这种情况下,用 NOT EXISTS 重写上面的查询会更好还是什么?
【问题讨论】:
-
可能是 JOIN?
-
两者都不一样..你的意思是
..Customers c WHERE EXISTS (SELECT 1 FROM Sales s where s.Cust_ID= c.Customer_ID);