Sqlite3缓慢更新

时间:2016-07-05 16:20:29

标签: performance sqlite subtraction

我有这个巨大的(8 GB / 14126762行)有两个表table1(非常大)和table2(小得多),我需要使用table2 vakyes来减少table1中的值。

虽然我使用较小的数据库(5MB数据库)进行了一些测试,但很好。但现在,当我在更大的数据库上使用它时,它需要永远,我不知道它是否有效。

例如,使用INSERT命令创建数据库需要12分钟。

麻烦的交易如下:

UPDATE table1
   SET vl_empenho = vl_empenho - 
     (SELECT vl_estorno 
     FROM table2 WHERE table1.cd_ugestora = 
     table2.cd_ugestora AND table1.dt_ano = 
     table2.dt_ano AND table1.nu_empenho = 
     table2.nu_empenho) 
   WHERE cd_ugestora IN (SELECT table2.cd_ugestora FROM 
     table2 WHERE table1.dt_ano =
     table2.dt_ano AND table1.nu_empenho =
     table2.nu_empenho); 

我不熟练使用Sqlite,而且交易给了我想要的东西,但我不知道它是否多余。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在阅读了评论和其他与stackoverflow相关的问题之后,我为查询的每一列创建了一个索引,我也设置了:

PRAGMA synchronize = OFF; 
PRAGMA jorunal_mode = MEMORY;

有了这个,我花了大约20分钟来完成上面提到的UPDATE和6分钟的INSERT命令,考虑到文件大小(实际上是10gb),我认为这是合适的。

感谢所有人的关注!

编辑:关于David Stein的评论,这是正确的!您无法使用这些选项轻松破坏您的数据库。就我而言,它是一个非常可替换的可重建数据库,没有敏感数据。我随时都想重建它,我是唯一的用户。所以我需要它超快速! 也许这不是你的情况。