【发布时间】:2018-04-24 20:22:05
【问题描述】:
我有一个非常简单的表格来记录传感器的读数。有一列用于传感器 ID 号,一列用于传感器读取,一列用于时间戳。此列是 SQL 类型的时间戳。表中有大量数据,几百万行。
当我使用某个传感器 ID 号查询某个时间戳之前的所有行时,有时可能需要很长时间。如果时间戳远在过去,则查询速度非常快,但如果是最近的时间戳,则最多可能需要 2 或 3 秒。
SQL 引擎似乎在对表进行迭代,直到找到大于查询时间戳的第一个时间戳。或者可能是大量的查询数据会减慢速度,我不知道。
无论如何,我在这里寻找设计建议,特别是要解决以下问题:为什么这么慢?我怎样才能让它更快?
这里有什么设计技巧可以应用吗?我对SQL不太了解,也许有一种方法可以让SQL引擎知道数据是有序的(现在不是,但我猜我可以在插入时对其进行排序)并加快查询速度。也许我应该改变查询完成的方式或者改变时间戳列的数据类型。
【问题讨论】:
-
"如果时间戳在很久以前,查询会很快,但如果是最近的时间戳,则最多可能需要 2 或 3 秒。" -> 您可能想升级到支持 DESC 索引的 MySQL 8.0 可能会加快对最近时间戳的搜索..
-
"看起来好像 SQL 引擎正在遍历表,直到它找到大于查询时间戳的第一个时间戳。或者可能大量的查询数据使其变慢,我不知道。”为过去的查询和最近时间戳的查询提供
EXPLAIN [query],以便我们查看计划是否不同。