查询(特别是)以下的mysql时是否有更好的性能:
SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300
在:
SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300
或BETWEEN语法只是用第二个sql代替?
答案 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)
expr
BETWEENmin
和max
如果
expr
大于或等于min
且expr
小于或等于max
,则BETWEEN返回1,否则返回0. 如果所有参数的类型相同,则相当于表达式(min
&lt; =expr
ANDexpr
&lt; =max
)。否则类型转换根据第11.2节“表达式评估中的类型转换”中描述的规则进行,但适用于所有三个参数。
所以它真的只是语法糖。
答案 2 :(得分:10)
BETWEEN
显示更清晰的意图并且读取更好(SQL要做的事情)。
答案 3 :(得分:1)
以下三个陈述将产生相同的结果:
min(int(item) for item in sys.stdin.readline().split() if int(item) >= 0)
i BETWEEN x AND y
x <= i AND i <= Y
但是在配置3中,mysql可能(取决于你的索引)使用不同的索引:顺序很重要,你应该使用EXPLAIN查询进行测试以查看差异