【问题标题】:What's mysql's "BETWEEN" performance over..?什么是mysql的“BETWEEN”性能超过..?
【发布时间】:2010-12-07 23:49:28
【问题描述】:

在以下(特别是)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


    【解决方案1】:

    我记得,没有区别。但是如果你自己看看:

    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
    

    制定相同的计划。

    【讨论】:

      【解决方案2】:

      来自the documentation:

      • expr 在min 和max 之间

      如果expr大于或等于min且expr小于或等于max,则BETWEEN返回1,否则返回0。这相当于表达式(@ 987654329@ expr AND expr max) 如果所有参数都属于同一类型。 否则根据第 11.2 节“表达式中的类型转换”中描述的规则进行类型转换评估”,但适用于所有三个论点。

      所以它真的只是语法糖。

      【讨论】:

        【解决方案3】:

        BETWEEN 显示更清晰的意图和更好的阅读(SQL 打算做的事情)。

        【讨论】:

        • 虽然你是对的,但它确实读起来更好,问题是关于性能。 ¯_(ツ)_/¯
        • @Jools - 在这个例子中,BETWEEN 语句少了 10 个字节......所以这就是你的表现:)
        【解决方案4】:

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

        1. i BETWEEN x AND y
        2. x &lt;= i AND i &lt;= Y
        3. i &gt;= x AND i &lt;= Y

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

        【讨论】:

          猜你喜欢
          • 2019-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-04
          • 2011-01-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多