我有一个包含大约1M条目的表。
此表中使用的主要请求是:
SELECT SUM(count_value),strftime('%Y-%m-%d %H:%M:00.000', created_at) as timestr FROM mytable GROUP BY timestr
给了我这样的结果:
123540 2018-02-01 15:32:00.000
225000 2018-02-01 15:33:00.000
不幸的是,使用strftime似乎很慢。上述请求大约需要2.5秒才能返回8行结果。
比较以下要求
SELECT SUM(count_value) FROM mytable GROUP BY created_at
仅用了400毫秒就可以获得500多个结果。
相同的表现:
SELECT SUM(count_value),created_at as timestr FROM mytable GROUP BY timestr
数据集不会在较宽的日期时间范围内传播(几分钟),但我不认为这是相关的。
有没有办法提高strftime的速度?
注意:请求的目标是总结一个按分钟分组的结果值。
更新1
如上所述: DB方案:
CREATE TABLE mytable (
created_at TEXT NOT NULL DEFAULT(strftime('%Y-%m-%d %H:%M:%f', 'now')),
uuid TEXT NOT NULL,
count_value INTEGER NOT NULL DEFAULT 0);
CREATE INDEX idx_date_cpt ON mytable(created_at ASC);
CREATE INDEX idx_uuid_cpt ON mytable(uuid ASC);
解释的结果
EXPLAIN QUERY PLAN SELECT SUM(count_value),strftime('%Y-%m-%d %H:%M:00.000', created_at) as timestr FROM mytable GROUP BY timestr
selectid order from detail
0 0 0 SCAN TABLE mytable
0 0 0 USE TEMP B-TREE FOR GROUP BY