【发布时间】:2017-04-22 18:41:12
【问题描述】:
我有一个名为 table1 的普通 SQLite 数据库表,它有 7 列,当然还有一个 rowid。第一列是 custom_id 数字,第二列是格式 YYYY-MM-DD 的日期,其他 5 列是实数数据列。数据库大约有10M行,custom_id和date列都有索引。
我想做的是加快以下查询:
SELECT date,max(data1) AS maximum
FROM table1
WHERE custom_id = '1123' AND data1 <> 'NaN'
GROUP BY strftime('%Y-%m', date)
我想为每个年月组合的 custom_id 1123 找到最大正确(不是 NaN)data1 值。上面的代码实际上运行良好,但第一次运行查询持续 10 秒,但第二次运行不到 1 秒,这对我来说没问题。我使用 PHP 在我的家用 PC Apache 服务器上运行查询。我认为 Apache 使用了一些缓存来解释差异。
但问题是,如何加快首次运行性能?我还有很多其他的 custom_id:s 要查询,不是所有的都可以缓存!我需要更多索引吗?另一种查询?
【问题讨论】:
-
你为什么有
date和date1? -
@GordonLinoff -
date(d-a-t-e) 和data1(d-a-t-a) 这是一个数值。 -
@GordonLinoff 我有日期和 5 个数据列 data1、data2、data3、data4 和 data5。我是否必须为每个数据列创建 5 个索引? table1(custom_id, data1), table1(custom_id, data2)... 这会大大增加文件大小。目前文件大小约为 900 兆字节。如果我必须使用更多索引,我不想超过 2 GB。
标签: sql performance sqlite date indexing