在Java中,逻辑OR条件的行为使得如果第一个条件是true
则它不评估第二个条件.
例如:
int a = 10; if (a == 10 || a == 0) { // Logic }
Java没有评估第二个test(a == 0
)因为第一个条件(a == 10
)是true
.
如果我们有这样的Oracle SQL语句:
select * from student where city = :city and (:age is null or age > :age)
如何(age > :age or :age is null)
评估?如果参数:age
是NULL
,那么它也会评估第二个条件吗?
数据库成本优化器将在构造查询执行时考虑许多因素.可能最重要的是所讨论的列上存在索引.它将根据测试的选择性决定顺序,并可以在不同的时间以不同的顺序执行它们.由于SQL是声明性而非过程性语言,因此通常无法控制这些条件的评估方式.
您可以提供一些"提示"来建议特定的执行订单,但您可能会对性能产生负面影响.