在(特别是)mysql中查询以下内容时是否有更好的性能:
SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300
超过:
SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300
还是 BETWEEN 语法只是被第二个 sql 替换了?
我记得,没有区别。但是如果你自己看看:
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
制定相同的计划。
从文档中:
expr
之间min
_max
如果
expr
大于或等于min
且expr
小于或等于max
,则 BETWEEN 返回 1,否则返回 0。如果所有参数的类型相同,则这等效于表达式 (min
<=expr
ANDexpr
<= )。max
否则,类型转换将根据第 11.2 节“表达式求值中的类型转换”中描述的规则进行,但适用于所有三个参数。
所以它真的只是语法糖。
BETWEEN
显示更清晰的意图并更好地阅读(SQL 开始要做的事情)。
以下三个语句将产生相同的结果:
i BETWEEN x AND y
x <= i AND i <= Y
i >= x AND i <= Y
但是在配置 3 中,mysql 可能(取决于您的索引)使用不同的索引:顺序很重要,您应该使用 EXPLAIN 查询进行测试以查看差异