我有一个普通的SQLite数据库表,名为table1,有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秒,这对我来说没问题。我用我的家用PC Apache服务器用PHP运行查询。我认为Apache使用了一些解释差异的缓存。
但问题是,如何加快第一次运行性能?我有很多其他的custom_id:s来查询,不是所有的都可以缓存!我需要更多指数吗?另一种查询?
答案 0 :(得分:1)
我们将创建一个支持以下操作的索引:
由于.site-brand-inner {
position:absolute; height:100%; width:100%; //remove this width
display: table;
}
不是确定性函数,因此无法创建以下索引
strftime
索引表达式中禁止的非确定性函数
因此我们将使用create index table1_ix on table1 (custom_id,strftime('%Y-%m', date));
strftime('%Y-%m', date)
substr(date,1,7)
应相应更改查询
create index table1_ix on table1 (custom_id,substr(date,1,7));
答案 1 :(得分:0)
我猜这是你想要的:
SELECT strftime('%Y-%m', date), max(data1) AS maximum
FROM table1
WHERE custom_id = 1123 AND data <> 'NaN'
GROUP BY strftime('%Y-%m', date)
从table1(custom_id, date)
上的索引开始。