Android SQLite需要很长时间才能完成

时间:2010-11-02 11:54:46

标签: android sql performance

我正在构建一个Android应用程序,但我不是我的SQL操作永远需要完成

我已经分析了应用程序以将其缩小到将Cursor移动到结果集的第一行以进行简单选择查询的行为(仅返回1行,我正在测试它以消除结果的大小设置为问题。

有没有更好的选项可以移动到结果集的开头?

编辑:

一些代码:

public Cursor sqlQuery(String Sql)
{
    Cursor c = database.rawQuery(Sql, null);
    //start at the first spot
    c.moveToFirst();
    return c;
}

和调用代码

    Cursor Slots = evedb.sqlQuery("SELECT attrib.value, "
            +"attribtypes.attributename "
            +"FROM dgmTypeAttribs AS attrib "
            +"INNER JOIN invTypes AS type "
            +"ON attrib.typeID = type._ID "
            +"INNER JOIN dgmAttribs AS attribtypes "
            +"ON attrib.attributeID = attribtypes._ID "
            +"AND attribtypes.attributename = 'hiSlots'  "
            +"AND type.typeName = '" + shipname + "'");

这次运行3次,对于所有剩余的代码我有大约2秒的时间,或者超过一分钟的时间用于此。

我还运行了rawQuery语句而没有移动到第一个,它需要大约18秒,所以我先看看代码中最糟糕的部分。

2 个答案:

答案 0 :(得分:1)

您可能拥有大型数据集。你能做什么:

  1. 确保您有正确的索引(所有FK字段都已建立索引?您是否在每个表的_ID字段上设置了PK?)ON或WHERE语法中使用的每个字段都应编入索引(一般来说)。< / p>

  2. 您应该更改一下您的查询:

    +"ON attrib.attributeID = attribtypes._ID "
    +"WHERE attribtypes.attributename = 'hiSlots'  "
    +"AND type.typeName = '" + shipname + "'");
    
  3. 考虑使用PreparedStatement

  4. 检查此查询使用的数据量 - 删除where where条件并将其放入计数(*)

  5. 考虑将一个大查询分成几个较小的查询。还有EXPLAIN命令可用于检查SQLite用于检索数据的方式。查看here以获取更多信息。

  6. 移动到第一行是查询开始收集数据的点,因此这只是数据库性能问题。

答案 1 :(得分:0)

您是否掌握了目前使用的代码以查看可能出现的问题?

如果您正在谈论移动到游标中的第一项,我使用:c.moveToFirst()其中c是光标。

相关问题