mysql - 如何有效地查询 MySQL 中特定日期范围之间的行?
问题描述
我有一个带有特定列的表created_time
,数据类型为datetime
. 它也是该表上的主键之一。
现在,当我尝试查询日期范围created_time BETWEEN :startTime AND :endTime
时,它最终会查看整个表,正如我从执行计划中看到的那样。
现在,还有另一个sensor_time
数据类型的主键列,它以unix格式INT
存储时间。当我在其中使用范围时,它只会在数据库中查找一小部分。
datetime
请有人向我解释为什么即使它是主键,该范围也不能有效地使用该类型。
解决方案
它也是该表上的主键之一。
呃。这是不可能的。主键是一组具有以下特征的列:
- 这些值是 never
NULL
。 - 给定行中的列组合始终是唯一的。
- 只有一个主键。
您可能有一个复合主键,由多列组成。在这种情况下,datetime
过滤器将仅用于具有此限制的查询:
where created_time between ? and ?
何时created_time
是主键中的第一列。否则,前面的列需要相等比较。
听起来您想要第二列datetime
作为索引中的第一列(如果有多个列)。
推荐阅读
- php - 前/后输入显示结果
- react-admin - 单个页面上有两个不同的 List 组件
- stm32 - STM32 SAI:了解FIFO
- bash - 为什么当通过管道传输到其他命令时 docker 伪 tty 会破坏输出?
- dart - 如何在文本下添加按钮
- excel - ALV 网格仅加载前 64 行,如何更改默认加载
- google-maps - Clojurescript - 无法限制到 Google Places Autocomplete API 中的城市
- machine-learning - 如何训练用于提取值的对话流可能不会被空间分割
- azure - 此版本的 SQL Server 不支持“CREATE CREDENTIAL”
- java - 在java流中使用return语句