在(特别是)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
,BETWEEN 返回 1,否则返回 0。 这相当于表达式 (max
<=min
ANDexpr
)<=expr
),如果所有参数的类型相同。 否则,类型转换将根据第 11.2 节“表达式求值中的类型转换”中描述的规则进行,但适用于所有三个参数。max
所以它实际上只是语法糖。
BETWEEN
显示更清晰的意图并且可读性更好(SQL 打算这样做)。
以下三个语句将产生相同的结果:
i BETWEEN x AND y
x <= i AND i <= y
i >= x AND i <= y
但是在配置 3 中,mysql 可能(取决于你的索引)使用不同的索引:顺序很重要,你应该使用 EXPLAIN 查询进行测试以查看差异