提问者:小点点

如何在MySQL中高效地查询特定日期范围之间的行?


我有一个表,其中有一列,例如created_time,数据类型为datetime。 它也是该表上的主键之一。

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

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

请给我解释一下,尽管datetime类型是主键,但该范围为什么不能有效地与它一起工作。


共1个答案

匿名用户

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

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

  • 这些值从不
  • 给定行中列的组合总是唯一的。
  • 只有一个主键。

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

where created_time between ? and ?

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

听起来您希望datetime上有第二列,并将其作为索引中的第一列(如果有多列)。