Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlite对于单个查询来说太慢_Sqlite - Fatal编程技术网

sqlite对于单个查询来说太慢

sqlite对于单个查询来说太慢,sqlite,Sqlite,我有一个名为Rain的表,它有大约10000行,模式如下: 创建表Rain(国家/地区文本、产品文本、日期、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

我有一个名为Rain的表,它有大约10000行,模式如下:

创建表Rain(国家/地区文本、产品文本、日期、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

现在,对于表中的每一行,我要计算到该行的
日期之前一年的总降雨量。我在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小时才能完成,这是不可接受的。

有什么建议吗

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

索引将允许更快地搜索行。 对于此查询,a将是最佳的:

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

在所有列上创建索引是否有帮助?