Sqlite3更新慢

Sqlite3 slow UPDATE

我有一个巨大的(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,交易给了我想要的,但我不知道它是否多余。

感谢您的帮助!

阅读评论和其他与Whosebug相关的问题后,我为查询中的每一列做了一个索引,我也设置了:

PRAGMA synchronize = OFF; 
PRAGMA jorunal_mode = MEMORY;

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

感谢大家的关注!

编辑:关于 D​​avid Stein 的评论,这是真的!你不能轻易地用这些选项破坏你的数据库。就我而言,这是一个非常可替换的可重建数据库,没有敏感数据。我可以随时重建它,而且我是它的唯一用户。所以我需要它非常快! 也许这不是你的情况。