【问题标题】:Android: how to find SQLITE_MAX_COMPOUND_SELECTAndroid:如何找到 SQLITE_MAX_COMPOUND_SELECT
【发布时间】:2013-01-10 17:48:57
【问题描述】:

有没有办法在 Android 上获取 SQLite 数据库的 SQLITE_MAX_COMPOUND_SELECT 的值?在C sqlite3 API中,这是sqlite3_limit(db, SQLITE_LIMIT_COMPOUND_SELECT, -1),但是我没有看到Android SQLite API中暴露了这个接口。

这样做的原因是我插入了数千行,并且发出批处理 INSERT 语句比许多单行插入更快,即使它包含在事务中也是如此。但是每个语句可以插入的最大行数受到SQLITE_MAX_COMPOUND_SELECT 的限制,因此需要将其分成几批。而且,出于显而易见的原因,我宁愿不硬编码默认限制 500。

【问题讨论】:

    标签: android performance sqlite


    【解决方案1】:

    SQLITE_LIMIT_COMPOUND_SELECT 限制不是防止内存溢出的方法(至少在 Android 系统上如此),而只是一个健全性检查。 因此,供应商不太可能减少默认值,因此 500 应该是安全的。

    此外,随着一个命令中插入的记录数越来越多,增量的加速会越来越小;例如,从 5 到 50 条记录的加速比从 50 到 500 的加速要大。 因此,仅使用 50 应该不会造成太大伤害。


    另一种加速重复执行的方法是使用准备好的语句,SQLiteDatabase.compileStatement

    【讨论】:

    • 这些都是好点。在这种情况下,硬编码该值似乎非常安全,并且使用远低于该值的批量大小应该足以提高性能。我将把它打开一段时间,以防有人知道在运行时获取值的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多