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()
语句的性能可能不如exists
。 exists
语句可以在第一个匹配值处停止。
【讨论】:
谢谢戈登·林诺夫。它返回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