SQLite-从具有日期列和按月分组的表中选择记录

SQLite-从具有日期列和按月分组的表中选择记录,sqlite,Sqlite,我有一个带有日期列的表,其中日期保存为长值,我希望按月份(而不是公历月份!)对记录进行分组,并对另一列的值求和 我首先创建了一个临时表,其中包含两个日期列(_from和_to),其中_from是一个月的第一个毫秒,而_to是该月的最后一个毫秒 然后我做了如下选择: SELECT SUM(MY_TABLE.amount), TEMP_TABLE._from FROM MY_TABLE, TEMP_TABLE WHERE TEMP_TABLE._from <= MY_TABLE.date

我有一个带有日期列的表,其中日期保存为长值,我希望按月份(而不是公历月份!)对记录进行分组,并对另一列的值求和

我首先创建了一个临时表,其中包含两个日期列(_from和_to),其中_from是一个月的第一个毫秒,而_to是该月的最后一个毫秒

然后我做了如下选择:

 SELECT SUM(MY_TABLE.amount), TEMP_TABLE._from
 FROM MY_TABLE, TEMP_TABLE
 WHERE TEMP_TABLE._from <= MY_TABLE.date AND TEMP_TABLE._to >= MY_TABLE.date
 GROUP BY TEMP_TABLE._from;
从中选择总和(我的表格金额)、临时表格金额
从我的表,临时表
其中TEMP\u TABLE.\u from=我的表日期
按临时表格分组;
我的桌子: 金额:我希望对每个月的值求和的列。 日期:每条记录的日期


但对于10K记录,返回结果表大约需要2秒钟,在我的用例中速度太慢。我需要一个更好的解决方案。

如果
\u from
列上没有索引,数据库必须将
\u from
中的所有
\u值写入临时表中,以便能够对它们进行分组。
如果
date
列上没有索引,则不扫描整个表就无法查找值。 您至少应具备以下条件:

对于此特定查询,您可以使用以下方法进一步提高性能:



用于检查查询实际使用了哪些索引。

您有索引吗?索引是什么意思?MY_表的id列作为主键。我还可以为temp_表创建唯一索引。\u from可提高性能,对吗?索引是否唯一或是否为约束隐式创建并不重要。
CREATE INDEX Temp_Table_from ON Temp_Table(_from);
CREATE INDEX My_Table_date ON My_Table(date);
CREATE INDEX Temp_Table_from_to ON Temp_Table(_from, _to);
CREATE INDEX My_Table_date_amount ON My_Table(date, amount);