【问题标题】:SQLite3 attach Database performanceSQLite3 附加数据库性能
【发布时间】:2018-11-30 13:19:20
【问题描述】:

我正在开发一个使用SQLite 处理data aggregation 的项目。我有multiple SQLite database 文件,这些文件按时间拆分。我计划使用SQLite ATTACH DATABASE 功能,这样我就可以对所有数据库运行单个查询。

每个数据库都有相同的索引和相同的表名。我希望能够运行单个查询,该查询将从所有数据库中提取记录并求和值以及一些类似的基本内容。然后运行更新以将这些记录标记为已处理。

问题是:SQLite 会并行执行这些查询吗?它会为每个数据库创建一个阅读器吗?它会知道根据查询和那里的索引跳过一些数据库吗?

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    SQLite 不能并行工作。

    此外,如果您有多个同名表,SQLite 不会自动访问所有这些表;您必须分别从每个表中获取数据并手动组合它们;像这样:

    SELECT (SELECT SUM(x) FROM FirstDB.SomeTable   WHERE ...) +
           (SELECT SUM(x) FROM Second DB.SomeTable WHERE ...) +
           ...;
    UPDATE FirstDB.SomeTable  SET Processed = 1 WHERE ...;
    UPDATE SecondDB.SomeTable SET Processed = 1 WHERE ...;
    ...
    

    【讨论】:

    • 所以听起来代理想法可能是最好的。同时向不同的数据库发送查询调用,然后进行某种合并排序。
    【解决方案2】:

    我们使用 sqlite 的方式与您将要使用的方式完全相同。我们没有找到实现您想要完成的目标的方法。

    在我们的案例中,数据是按时间排序的,因此我们只需查询所有数据库并将排序后的结果附加到一个列表中。

    您可以创建一种代理来存储数据库列表并处理您的所有查询。不幸的是,每个单独的查询可能必须手动连接,就像在您的 SUM() 案例中一样。

    【讨论】:

    • 这很有趣,遗憾的是他们没有将该功能添加到库绑定中,如果它支持的话,它可以使 sqlite 成为一种力量
    猜你喜欢
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 2018-08-16
    • 1970-01-01
    相关资源
    最近更新 更多