MySQL - 查询时间戳更有效率在哪里?

时间:2018-03-12 16:44:56

标签: mysql sql

我有一个包含主键,索引字段和未编制索引的时间戳字段的表。

  • 按时间戳查询是否更有效率?比方说 - 12小时?
  • 通过主键查询还是使用索引字段更好?让我们说索引字段的查询不是必须的。

示例:

p_key  |   project   | name  | timestamp
-----------------------------------------
1      |    1        |  a    |    18:00
2      |    1        |  b    |     19:00

我想获得记录1.

我应该问:

SELECT *
FROM tbl
WHERE p_key = 1 AND project = 1 AND timestamp BETWEEN 16:30 AND 18:30)

OR

SELECT *
FROM tbl
WHERE p_key = 1

让我们说我有很多记录。

3 个答案:

答案 0 :(得分:2)

在您的示例中,哪个查询在执行时间方面更有效并不重要。需要注意的重要一点是主键是唯一的。

您的查询:

SELECT * FROM tbl WHERE p_key = 1

将返回与其他查询相同的行:

SELECT * FROM tbl WHERE p_key = 1 AND project = 1 AND timestamp BETWEEN 16:30 AND 18:30)

因为p_key上的两个过滤器都是1.这里最糟糕的情况是该条目实际上并不属于第二个查询中的时间范围,并且根本没有结果。

我假设你在主键上有一个索引。这意味着绝对不需要运行第二个查询与第一个查询,除非它可能不在请求的时间范围内。

因此,您在数据库中的效率将是您不需要为第二个查询创建和维护新索引。如果你有很多"很多"如你所说的那样,这种效率会变得非常重要。

答案 1 :(得分:0)

整数索引字段的过滤器将是在正常情况下获取数据的最快方法。 了解您的数据看起来像您的示例(我的意思是,时间戳在您的查询中并不重要,并且通过主键过滤您获得单个记录...) 此外,默认情况下,主键会生成索引,因此您无需在此字段上自行创建索引。

答案 2 :(得分:0)

显然是第二种选择!!!

SELECT * FROM tbl WHERE p_key = 1

通过主键过滤显然比任何其他字段(在您的示例中)更有效,因为它是唯一被索引的字段。

此外,主键足以获得您期望的记录。无需增加复杂性,bug风险......和计算时间(是的,需要处理where子句中的条件。添加的越多,可以花的时间越长)