【问题标题】:SQLite record update speed improvementsSQLite 记录更新速度改进
【发布时间】:2017-04-23 01:29:44
【问题描述】:

我目前无法在合适的时间内大规模更新 SQLite 数据库记录。

我有一个包含大约 70,000 条记录的小型数据库,我有一些办公室人员使用 Navicat 过滤记录并进行一些批量编辑以提交。当尝试对一个字段中的大量记录执行 UPDATE 时,一切都变得一团糟,当我查看原始 SQL 查询时,我可以看到程序正在使用 UPDATE ..SET.. WHERE 来执行操作。

我的问题是我可以做些什么来帮助这个查询运行得更快?我在用于匹配要更新的记录的列上有一个 SQLite 自动索引,但是我已经阅读和搜索了所有内容,但除了我已有的解决方案之外,还没有看到任何类型的解决方案。更新 20,000 条记录中的一个字段实际上需要将近 3 个小时……无论是否使用 Navicat。整个数据库只有 30mb,所以我一定是做错了。

所有其他数据库操作都运行良好且快速,不确定出了什么问题并寻求 SQLite 兽医的指导。

【问题讨论】:

  • 该 UPDATE 是否使用子查询?
  • 我可以从原始输出中看到的一个例子是:UPDATE table SET column=1.0 WHERE (column_value='value') column_value is a SQLite auto indexed column if that 这很重要...跨度>

标签: database performance sqlite


【解决方案1】:

SQLite 表现不如您描述的那么差的原因很少,但我经历过几乎相同的事情。

首先,如果您在索引列上执行表范围的更新,您将破坏整个索引,同时降低索引的无用性。在更新之前删除索引,然后重新创建索引。

此外,您可以通过更改同步 PRAGMA 来大幅提升性能,但它会带来非零的额外崩溃数据损坏风险(根据我的经验,这极不可能)

PRAGMA schema.synchronous = 0 

【讨论】:

  • 我会尝试编辑架构以查看是否有帮助。就索引而言,我不会更新被索引的列。我正在更新另一个字段,但在用于匹配需要更新的记录的列上有一个 sqlite_auto_index。尽管如此,架构设置是否足以让更新所有内容变得如此缓慢?
猜你喜欢
  • 1970-01-01
  • 2021-11-15
  • 2023-03-06
  • 2018-06-09
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多