这是 Oracle Where exists (Select NULL FROM...) 中的一种新的常见模式吗?

ber*_*d_k 8 oracle sql-server style

多年前,写

where exists (Select * from some_table where some_condition)
Run Code Online (Sandbox Code Playgroud)

去年我注意到许多 t-sql 脚本切换到使用数字 1 而不是星号

where exists (Select 1 from some_table where some_condition)
Run Code Online (Sandbox Code Playgroud)

就在所以我看到了这个 Oracle 示例

WHERE EXISTS (SELECT NULL FROM ...
Run Code Online (Sandbox Code Playgroud)

这是 Oracle 的常见模式吗?哪些是使用这样的东西的性能参数。

小智 6

简短的回答:我希望不会!

甚至这个SELECT 1习语也可能已经失去了它的用处,因为数据库引擎已经足够先进,可以认识到您并不真正想要这些行,您只想知道这些行是否存在。我看过 SQL 2005 中的执行计划,并且通常看到这些被重写为连接,即使在SELECT *使用的地方也是如此。


Lei*_*fel 5

在 Oracle 中,性能方面并不重要。您甚至可以将 1/0 放在那里,并且该语句不会返回除以零错误,因为该表达式没有被计算。