mysql 的“BETWEEN”性能如何?

问题描述 投票:0回答:4

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

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

结束:

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

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

mysql between
4个回答
51
投票

据我记得,没有什么区别。但请亲自看看是否:

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

制定相同的计划。


32
投票

来自文档

  • expr
    min
    max
  • 之间

如果

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

所以它实际上只是语法糖。


8
投票

BETWEEN
显示更清晰的意图并且可读性更好(SQL 打算这样做)。


5
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.