mysql where子句在列之前的值

时间:2018-01-16 22:43:41

标签: mysql where

WHERE子句通常写为:

WHERE columnName > 45

我确信多年前我读到这样反转它的效率很低:

WHERE 45 < columnName

优化器是否关心?对于日期/日期时间数据类型怎么样?例如。这没关系

WHERE FROM_UNIXTIME(1516142364) < dateTimeColumn

我读到的内容可能与BETWEEN有关,但我想不出一个例子 - 如果你能阅读我的潜意识那么奖励积分: - )

(并不是说我想让它们颠倒过来,但我在其他人的代码中看到它,并且想知道它是否只是编码标准问题,或者它是否也是一个效率问题。)

2 个答案:

答案 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中,限制是包含的,而在上面的示例中,它们是独占的。