【发布时间】:2019-08-13 17:29:29
【问题描述】:
在 SQLite 中,我有一个大型数据库 (~35Mb)。
它包含一个具有以下语法的表:
CREATE TABLE "log_temperature" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"date" datetime NOT NULL,
"temperature" varchar(20) NOT NULL
)
现在当我想搜索一个周期内的数据时,在嵌入式系统上太慢了:
$ time sqlite3 sample.sqlite "select MIN(id) from log_temperature where
date BETWEEN '2019-08-13 00:00:00' AND '2019-08-13 23:59:59';"
331106
real 0m2.123s
user 0m0.847s
sys 0m0.279s
注意 1:id 的范围是 210610 到 331600。
注意 2:如果我运行“SELECT id FROM log_temperature ORDER BY ASC LIMIT 1”,它给出的时间与“MIN”函数完全相同。
我想让“0m2.123s 的实时时间”尽可能接近 0m0.0s。
我有哪些选择可以加快速度? (不删除数十万条数据?)
ps.:嵌入式系统参数在这里并不重要。这应通过优化查询或底层架构来解决。
【问题讨论】:
-
有索引吗?
-
@Sami:是的,id 有一个索引,(id,date) 也有它。现在我不知道索引也可以在不唯一的情况下定义,所以我现在为日期字段添加了一个索引,这消除了慢查询 - 正如 Patrick 首先建议的那样。
标签: sql performance sqlite