我有一个表,其中有一列,例如created_time
,数据类型为datetime
。 它也是该表上的主键之一。
现在,当我尝试查询日期范围created_time BETWEEN:starttime AND:endtime
时,它最终会查看整个表,正如我从执行计划中看到的那样。
现在,有另一个主键列sensor_time
,数据类型为int
,它以unix格式存储时间。 当我在这个中使用范围时,它只在数据库中查找一个小的子部分。
请给我解释一下,尽管datetime
类型是主键,但该范围为什么不能有效地与它一起工作。
它也是该表上的主键之一。
呃。这不可能。 主键是一组具有以下特征的列:
空
。您可能有一个复合主键,由多个列组成。 在这种情况下,datetime
筛选器将仅用于具有以下限制的查询:
where created_time between ? and ?
当created_time
是主键中的第一列时。 否则,前面的列需要进行相等比较。
听起来您希望datetime
上有第二列,并将其作为索引中的第一列(如果有多列)。