sqlite对于单个查询来说太慢了

时间:2015-09-17 08:05:12

标签: sqlite

我有一个名为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个小时,这是不可接受的 有什么建议?

1 个答案:

答案 0 :(得分:0)

数据库必须扫描子查询的每次执行的所有行。 换句话说,您有大约100,000,000次行访问。

索引可以更快地搜索行。 对于此查询,covering index将是最佳的:

CREATE INDEX whatever ON Rain(Country, Product, Date, Pr24);