SQLite 更新查询优化

Posted

技术标签:

【中文标题】SQLite 更新查询优化【英文标题】:SQLite Update Query Optimization 【发布时间】:2016-07-12 16:41:40 【问题描述】:

所以我有以下结构的表:

TimeStamp,
var_1,
var_2,
var_3,
var_4,
var_5,...

这包含大约 600 个名为 var_## 的列,用户解析机器存储的一些数据,我必须将该表中的所有空值更新为最后一个有效值。目前我使用以下查询:

update tableName 
    set var_##  = 
            (select   b.var_##  from   tableName  as 
                      where b.timeStamp <=   tableName.timeStamp and   b.var_##   is not null  
                      order by timeStamp desc limit 1)  
    where   tableName.var_##   is null;

现在的问题是为所有列运行此查询所需的驯服,有没有办法优化此查询?

更新:这是对一列执行查询时的输出查询计划:

update wme_test2 
set var_6  = 
        (select   b.var_6  from   wme_test2  as b
                        where b.timeStamp <=   wme_test2.timeStamp and   b.var_6   is not null  
                        order by timeStamp desc limit 1)  
   where   wme_test2.var_6   is null;

【问题讨论】:

我会把它分成 2 个表,这样你就没有 600 列的表 【参考方案1】:

在数据列上有 600 个索引会很愚蠢。 (但不一定比拥有 600 列更愚蠢。)

所有查询都可以通过timeStamp 列上的索引来加速。

【讨论】:

好吧,我已经尝试过使用 timeStamp 上的索引和没有索引,运行这些查询所需的时间没有显着差异。由于所有其他列都依赖于该列,并且表也更常用于创建表视图,因此我认为最好将所有列保存在一个表中,而不是创建小组并加入它们以进行可视化。你有什么建议?如何创建更多的表分组变量? 感谢您现在告诉我们。显示此查询的 EXPLAIN QUERY PLAN 的输出。

以上是关于SQLite 更新查询优化的主要内容,如果未能解决你的问题,请参考以下文章

SQLite 优化查询

SQLite:如何优化 UNION 查询

sqlite 查询优化

如果可能的话,优化一个简单的 SQLite 查询!

优化数以千计的 SQLite 查询 android

SQLite3 数据库查询优化