gpt4 book ai didi

mysql - 什么是更好的选择? IN 运算符或 EXISTS

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:34 24 4
gpt4 key购买 nike

什么是更好的选择?使用 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 重写上面的查询会更好吗?

最佳答案

这两个查询做不同的事情。您可能打算对 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 差。

关于mysql - 什么是更好的选择? IN 运算符或 EXISTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45235429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com