2017-04-23 122 views
0

我目前在健康的时间内按比例更新SQLite数据库记录时遇到问题。SQLite记录更新速度改进

我有一个大约70,000条记录的小型数据库,我有一些办公室个人使用Navicat过滤记录并进行一些批量编辑提交。当试图对一个字段中的大量记录执行UPDATE时,所有内容都会进行爬网,当我查看原始SQL查询时,我可以看到程序正在使用UPDATE ..SET .. WHERE来执行这些操作。

我的问题是我能做些什么来帮助这个查询运行得更快?我在用于匹配记录更新的列上有一个SQLite自动索引,但我已经阅读和搜索了所有内容,并且还没有看到任何其他解决方案,然后我已经有了。更新20000个记录中的一个字段实际上花费了近3个小时......不管是否使用Navicat。整个数据库只有30mb,所以我必须做出错误的事情。

所有其他数据库操作运行良好,快速,不知道什么是错误的,并寻找从SQLite兽医的指导。

+0

带有一个非零量的数据损坏的额外风险那个UPDATE是否使用子查询? –

+0

我可以从原始输出中看到的一个示例是:UPDATE表SET列= 1.0 WHERE(column_value ='value') column_value是一个SQLite自动索引列,如果重要的话... –

回答

0

SQLite的表现很差,原因很简单,但我经历了几乎相同的事情。首先,如果您正在对索引列进行全表更新,那么您会颠覆整个索引,同时使索引变得毫无用处。在更新之前删除索引,然后重新创建索引。

此外,还可以通过改变同步PRAGMA得到一些严重PERF提升,但它崩溃(在我的经验非常不可能)

PRAGMA schema.synchronous = 0 
+0

我尝试编辑架构看看它是否有帮助。就索引而言,我没有更新索引的列。我正在更新另一个字段,但在用于匹配需要更新的记录的列上有一个sqlite_auto_index。无论如何,模式设置是否足以使更新缓慢的一切? –