Sqlite 安卓优化

Posted

技术标签:

【中文标题】Sqlite 安卓优化【英文标题】:Sqlite Android Optimization 【发布时间】:2016-08-01 17:50:49 【问题描述】:

我有一个运行良好的应用程序。但我怀疑如果我优化对数据库的查询,我可以改进它。我需要建议。

这是我的“选择查询”的一部分:

private static final String SELECT = "SELECT " +
        "dz.first_id AS first_id, " +
        "dz._id AS _id, " +
        "dz.att1 AS att1, " +
        "dz.att2 AS att2, " +
        "dz.att3 AS att3, " +
        "dz.att4 AS att4, " +
        "dz.att5 AS att5, " +
        "d.var1 AS var1, " +
        "d.name AS name, " +
        "d.last_update AS last_update, " +
        "d.image_url AS image_url, " +
        "d.image_highlighted_url AS image_highlighted_url, " +
        "d.var2 AS var2, " +
        "d.type AS type, " +
        "d.state AS state, " +
        "d.sync AS sync, " +
        "d.var3 AS var3 " +
        "FROM table1 dz INNER JOIN table2 d " +
        "ON d._id = dz.first_id ";

Cursor result = conn.rawQuery(SELECT, null);

*table1table2 创建简单:只有一个_id integer PRIMARY KEY AUTOINCREMENT NOT NULL

使用视图有用吗?还有什么建议吗?

谢谢。

【问题讨论】:

您是否在寻找查询优化?请明确点。另外,您可以发布您的表架构吗? 索引 WHERE 和 JOIN 可以挽救生命。但也使用 StringBuilders 代替字符串连接。 我正在寻找查询优化是的。建表很简单,只有一个_id integer PRIMARY KEY AUTOINCREMENT NOT NULL 有实际问题吗? 【参考方案1】:

这个查询看起来很简单,他们可以得到,我认为你的选择真的是看看你是否可以以某种方式将一些不必要的列从你的选择中剔除,或者看看 dz.first_id 和 d._id 都有索引设置。也许使用以下内容向 dz 添加索引

CREATE INDEX index1 ON table1 (first_id);

【讨论】:

如果没有这个查询,数据库将扫描table1并使用rowid(_id)在table2中查找匹配的行,这比使用单独的索引要快,所以我怀疑这将改变一切。

以上是关于Sqlite 安卓优化的主要内容,如果未能解决你的问题,请参考以下文章

安卓的sqlite增删改

安卓SQLite常见错误

安卓数据存储:SQLite数据库存储

安卓讲课笔记6.3 使用SQLite数据库

安卓讲课笔记6.3 使用SQLite数据库

安卓:CursorLoader、LoaderManager、SQLite