MySQL EXISTS与IN
要查找至少有一个销售订单的客户,可以使用IN运算符,如下所示:
SELECT
customerNumber, customerName
FROM
customers
WHERE
customerNumber IN (SELECT
customerNumber
FROM
orders);
也可以使用EXISTS运算符:
SELECT
customerNumber, customerName
FROM
customers
WHERE
EXISTS( SELECT
1
FROM
orders
WHERE
orders.customernumber = customers.customernumber);
使用EXISTS运算符的查询比使用IN运算符的查询要快得多。
原因是EXISTS操作员基于“至少找到”原则工作。它返回true并在找到至少一个匹配行后停止扫描表。
另一方面,当IN运算符与子查询组合时,MySQL必须首先处理子查询,然后使用子查询的结果来处理整个查询。
一般的经验法则是,如果子查询包含大量数据,则EXISTS运算符可提供更好的性能。
但是,如果从子查询返回的结果集非常小,则使用IN运算符的查询将执行得更快。
本内容为合法授权发布,文章内容为作者独立观点,不代表开发云立场,未经允许不得转载。