52

在(特别是)mysql中查询以下内容时是否有更好的性能:

SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300

超过:

SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300

还是 BETWEEN 语法只是被第二个 sql 替换了?

4

4 回答 4

48

我记得,没有区别。但是如果你自己看看:

explain plan for 
SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300

和:

explain plan for
SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300

制定相同的计划。

于 2010-12-07T23:53:25.527 回答
31

文档中

  • expr之间min_max

如果expr大于或等于minexpr小于或等于max,则 BETWEEN 返回 1,否则返回 0。如果所有参数的类型相同,则这等效于表达式 ( min<= exprAND expr<= )。max否则,类型转换将根据第 11.2 节“表达式求值中的类型转换”中描述的规则进行,但适用于所有三个参数。

所以它真的只是语法糖。

于 2010-12-07T23:51:53.950 回答
9

BETWEEN显示更清晰的意图并更好地阅读(SQL 开始要做的事情)。

于 2010-12-07T23:51:22.883 回答
5

以下三个语句将产生相同的结果:

  1. i BETWEEN x AND y
  2. x <= i AND i <= Y
  3. i >= x AND i <= Y

但是在配置 3 中,mysql 可能(取决于您的索引)使用不同的索引:顺序很重要,您应该使用 EXPLAIN 查询进行测试以查看差异

于 2017-02-21T22:24:35.680 回答