WHERE子句通常写为:
WHERE columnName > 45
我确信多年前我读到这样反转它的效率很低:
WHERE 45 < columnName
优化器是否关心?对于日期/日期时间数据类型怎么样?例如。这没关系
WHERE FROM_UNIXTIME(1516142364) < dateTimeColumn
我读到的内容可能与BETWEEN
有关,但我想不出一个例子 - 如果你能阅读我的潜意识那么奖励积分: - )
(并不是说我想让它们颠倒过来,但我在其他人的代码中看到它,并且想知道它是否只是编码标准问题,或者它是否也是一个效率问题。)
答案 0 :(得分:2)
优化器不关心比较中操作数的排序。传统上,该列首先出现。
某些语言(例如C)具有不同的赋值和比较运算符。因此,当您真正意味着if (x = 0)
时,您最终可以写if (x == 0)
。第一个是作业;第二个比较。在这些语言中,一些程序员经常首先编写常量,因为if (0 = x)
会产生编译器错误。
我可以看到这种习惯延续到SQL中,即使分配问题通常不是问题。
答案 1 :(得分:2)
我无法想象效率会有所不同。这只是一个偏好问题。虽然我更喜欢第一种形式,但有些情况下反转的形式是有意义的
WHERE 0 < x AND x < 100
比
更容易阅读WHERE x > 0 AND x < 100
请注意,在x BETWEEN 0 AND 100
中,限制是包含的,而在上面的示例中,它们是独占的。