首页 > 解决方案 > 如何有效地查询 MySQL 中特定日期范围之间的行?

问题描述

我有一个带有特定列的表created_time,数据类型为datetime. 它也是该表上的主键之一。

现在,当我尝试查询日期范围created_time BETWEEN :startTime AND :endTime时,它最终会查看整个表,正如我从执行计划中看到的那样。

现在,还有另一个sensor_time数据类型的主键列,它以unix格式INT存储时间。当我在其中使用范围时,它只会在数据库中查找一小部分。

datetime请有人向我解释为什么即使它是主键,该范围也不能有效地使用该类型。

标签: mysqlsqldatabase

解决方案


它也是该表上的主键之一。

呃。这是不可能的。主键是一组具有以下特征的列:

  • 这些值是 never NULL
  • 给定行中的列组合始终是唯一的。
  • 只有一个主键

您可能有一个复合主键,由多列组成。在这种情况下,datetime过滤器将仅用于具有此限制的查询:

where created_time between ? and ?

何时created_time是主键中的第一列。否则,前面的列需要相等比较。

听起来您想要第二列datetime作为索引中的第一列(如果有多个列)。


推荐阅读