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

Dav*_*eel 41 mysql between

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

SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300
Run Code Online (Sandbox Code Playgroud)

过度:

SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300
Run Code Online (Sandbox Code Playgroud)

或BETWEEN语法只是用第二个sql代替?

tpd*_*pdi 37

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

explain plan for 
SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300
Run Code Online (Sandbox Code Playgroud)

和:

explain plan for
SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300
Run Code Online (Sandbox Code Playgroud)

制定相同的计划.


Pao*_*ino 28

文档:

  • exprmin和之间max

如果expr大于或等于minexpr小于或等于max,则BETWEEN返回1,否则返回0. 如果所有参数的类型相同,则等效于表达式(min<= exprAND expr<= max).否则,类型转换将根据第11.2节"表达式评估中的类型转换"中所述的规则进行,但应用于所有三个参数.

所以它真的只是语法糖.


ale*_*lex 10

BETWEEN 显示更清晰的意图和更好的读取(SQL要做的事情).

  • 虽然你是对的,但它确实读起来更好,问题是关于性能。¯\_(ツ)_/¯ (5认同)

Sou*_*zal 5

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

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

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