我有一个案例,使用 JOIN 或 IN 会给我正确的结果......通常有更好的性能,为什么?这在多大程度上取决于您正在运行的数据库服务器?(仅供参考,我正在使用 MSSQL)
一般来说,IN不同JOIN的查询可以产生不同的结果。
IN
JOIN
SELECT a.* FROM a JOIN b ON a.col = b.col
不一样
SELECT a.* FROM a WHERE col IN ( SELECT col FROM b )
, 除非b.col是唯一的。
b.col
但是,这是第一个查询的同义词:
SELECT a.* FROM a JOIN ( SELECT DISTINCT col FROM b ) ON b.col = a.col
如果连接列是UNIQUE这样标记的,那么这两个查询都会产生相同的计划SQL Server。
UNIQUE
SQL Server
如果不是,则IN比JOINon更快DISTINCT。
DISTINCT
有关性能详细信息,请参阅我的博客中的这篇文章:
EXISTS