我有一个名为Rain的表,它有大约10000行,具有以下模式:
CREATE TABLE Rain(国家TEXT,产品文本,日期,Pr24 REAL)
AR | CORN | 1998-01-01 00:00:00 | 18.47319984
AR | CORN | 1998-01-02 00:00:00 | 1.517950058
AR | CORN | 1998-01-03 00:00:00 | 1.34533
AR | CORN | 1998-01-04 00:00:00 | 7.247509956
AR | CORN | 1998-01-05 00:00:00 | 6.925020218
现在对于表中的每一行,我想计算一年中的总降雨量,直到行的Date
。我在sqlte3解释器中执行以下代码:
CREATE TABLE result AS
SELECT Country, Product, Date,
(SELECT SUM(Pr24) FROM Rain AS tmpTb
WHERE tmpTb.Date BETWEEN datetime(Rain.Date, 'start of year') AND Rain.Date)
AND tmpTb.Country = Rain.Country AND tmpTb.Product = Rain.Product
) AS Rainfall
FROM Rain
但完成大约需要4~5个小时,这是不可接受的 有什么建议?
答案 0 :(得分:0)
数据库必须扫描子查询的每次执行的所有行。 换句话说,您有大约100,000,000次行访问。
索引可以更快地搜索行。 对于此查询,covering index将是最佳的:
CREATE INDEX whatever ON Rain(Country, Product, Date, Pr24);