SQL EXISTS vs. Aggregate IS NOT NULL

Posted

技术标签:

【中文标题】SQL EXISTS vs. Aggregate IS NOT NULL【英文标题】: 【发布时间】:2014-02-17 02:00:18 【问题描述】:

我有两种不同形式的 SQL 条件子句。

使用 EXISTS:

exists (select 1 from [table] where [conditions]) 

使用聚合函数:

(select max(1) from [table] where [conditions]) is not null

[table] 和 [conditions] 在两个语句中是相等的。 这两个子句是否有可能返回不同的结果? 如果不是,哪个查询性能更好? 如果重要的话,有问题的数据库是 IBM DB2 UDB v10。

【问题讨论】:

IBM DB2 UDB v10 有 EXPLAIN 语句吗? 没有 DB2 UDB v10 这样的东西。 是的,有解释。但是我没有使用它的特权。 【参考方案1】:

我没有 DB2 来测试它。但我认为这取决于。以下声明:

select max(1)
from (select 1 as i)t
where i = 2

在 SQL Server (null) 和 mysql (1) 上产生不同的结果。如果 DB2 返回1,那么语句是不同的。不过,我希望它会返回 null

如果它返回null,那么这两个语句的效果是一样的。但是,max() 语句的性能可能不如existsexists 语句可以在第一个匹配值处停止。

【讨论】:

谢谢戈登·林诺夫。它返回null。再次感谢您对速度的解释。

以上是关于SQL EXISTS vs. Aggregate IS NOT NULL的主要内容,如果未能解决你的问题,请参考以下文章

NOT IN vs. NOT EXISTS vs. LEFT JOIN / IS NULL: SQL Server

SQL Server-聚焦NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL性能分析(十八)

SQL Server 查询:SELECT 1 WHERE EXISTS vs SELECT TOP 1 1

LINQ 扩展方法 - Any() vs. Where() vs. Exists()

LINQ Any vs Exists 性能 [重复]

SQL-SQL函数Aggregate 函数