首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加速SQLite查询

加速SQLite查询
EN

Stack Overflow用户
提问于 2016-01-09 18:21:31
回答 1查看 266关注 0票数 0

我目前正在学习SQLite (由Python调用)。

根据我之前的问题(Reorganising Data in SQLLIte),我想在我的数据库中存储多个时间序列(训练数据)。

我定义了以下字段:

代码语言:javascript
复制
CREATE TABLE VARLIST 
(
     VarID INTEGER PRIMARY KEY AUTOINCREMENT, 
     name TEXT UNIQUE NOT NULL
)    

CREATE TABLE DATAPOINTS 
(
     DataID INTEGER PRIMARY KEY, 
     timeID INTEGER, 
     VarID INTEGER, 
     value REAL
)

CREATE TABLE TIMESTAMPS 
(
     timeID INTEGER PRIMARY KEY AUTOINCREMENT, 
     TRAININGS_ID INT, 
     TRAINING_TIME_SECONDS FLOAT
)

VARLIST有8个条目,TIMESTAMPS 1e5条目和DATAPOINTS大约5e6。

当我现在想提取给定TrainingsIDVarID的数据时,我尝试如下:

代码语言:javascript
复制
SELECT             
    (SELECT TIMESTAMPS.TRAINING_TIME_SECONDS 
     FROM TIMESTAMPS 
     WHERE t.timeID = timeID) AS TRAINING_TIME_SECONDS,
    (SELECT value 
     FROM DATAPOINTS 
     WHERE DATAPOINTS.timeID = t.timeID and DATAPOINTS.VarID = 2) as value
FROM 
    (SELECT timeID  
     FROM TIMESTAMPS 
     WHERE TRAININGS_ID = 96) as t;

命令EXPLAIN QUERY PLAN传递:

代码语言:javascript
复制
0|0|0|SCAN TABLE TIMESTAMPS
0|0|0|EXECUTE CORRELATED SCALAR SUBQUERY 1
1|0|0|SEARCH TABLE TIMESTAMPS USING INTEGER PRIMARY KEY (rowid=?)
0|0|0|EXECUTE CORRELATED SCALAR SUBQUERY 2
2|0|0|SCAN TABLE DATAPOINTS

这基本上管用。

但是有两个问题:

  1. 小问题:如果有一个timeID,其中没有被请求的VarID is availabe, I get an line with the valueNone`的数据。 我宁愿跳过这一行。
  2. 大问题:搜索速度非常慢(使用http://sqlitebrowser.org/大约5分钟)。

我怎样才能更好地提高表现呢?

是否有更好的方法来制定SELECT命令,或者我应该修改数据库结构本身?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-10 15:38:11

好的,根据我得到的提示,我可以非常快地通过applieng索引加速搜索如下:

代码语言:javascript
复制
CREATE INDEX IF NOT EXISTS DP_Index on DATAPOINTS (VarID,timeID,DataID);
CREATE INDEX IF NOT EXISTS TS_Index on TIMESTAMPS(TRAININGS_ID,timeID);

EXPLAIN QUERY PLAN输出现在如下所示:

代码语言:javascript
复制
0|0|0|SEARCH TABLE TIMESTAMPS USING COVERING INDEX TS_Index (TRAININGS_ID=?)
0|0|0|EXECUTE CORRELATED SCALAR SUBQUERY 1
1|0|0|SEARCH TABLE TIMESTAMPS USING INTEGER PRIMARY KEY (rowid=?)
0|0|0|EXECUTE CORRELATED SCALAR SUBQUERY 2
2|0|0|SEARCH TABLE DATAPOINTS USING INDEX DP_Index (VarID=? AND timeID=?)

感谢您的评论。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34697236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档