SQLite-从具有日期列和按月分组的表中选择记录
我有一个带有日期列的表,其中日期保存为长值,我希望按月份(而不是公历月份!)对记录进行分组,并对另一列的值求和 我首先创建了一个临时表,其中包含两个日期列(_from和_to),其中_from是一个月的第一个毫秒,而_to是该月的最后一个毫秒 然后我做了如下选择: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
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);