什么是mysql的“BETWEEN”性能超过..?

时间:2010-12-07 23:49:29

标签: mysql between

查询(特别是)以下的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 个答案:

答案 0 :(得分:36)

我记得,没有区别。但请亲自看看:

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

制定相同的计划。

答案 1 :(得分:26)

来自the documentation

  
      
  • expr BETWEEN minmax
  •   
     

如果expr大于或等于minexpr小于或等于max,则BETWEEN返回1,否则返回0. 如果所有参数的类型相同,则相当于表达式(min&lt; = expr AND expr&lt; = max)。否则类型转换根据第11.2节“表达式评估中的类型转换”中描述的规则进行,但适用于所有三个参数。

所以它真的只是语法糖。

答案 2 :(得分:10)

BETWEEN显示更清晰的意图并且读取更好(SQL要做的事情)。

答案 3 :(得分:1)

以下三个陈述将产生相同的结果:

  1. min(int(item) for item in sys.stdin.readline().split() if int(item) >= 0)
  2. i BETWEEN x AND y
  3. x <= i AND i <= Y
  4. 但是在配置3中,mysql可能(取决于你的索引)使用不同的索引:顺序很重要,你应该使用EXPLAIN查询进行测试以查看差异