我正在构建一个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秒,所以我先看看代码中最糟糕的部分。
答案 0 :(得分:1)
您可能拥有大型数据集。你能做什么:
确保您有正确的索引(所有FK字段都已建立索引?您是否在每个表的_ID字段上设置了PK?)ON或WHERE语法中使用的每个字段都应编入索引(一般来说)。< / p>
您应该更改一下您的查询:
+"ON attrib.attributeID = attribtypes._ID "
+"WHERE attribtypes.attributename = 'hiSlots' "
+"AND type.typeName = '" + shipname + "'");
考虑使用PreparedStatement
检查此查询使用的数据量 - 删除where where条件并将其放入计数(*)
考虑将一个大查询分成几个较小的查询。还有EXPLAIN命令可用于检查SQLite用于检索数据的方式。查看here以获取更多信息。
移动到第一行是查询开始收集数据的点,因此这只是数据库性能问题。
答案 1 :(得分:0)
您是否掌握了目前使用的代码以查看可能出现的问题?
如果您正在谈论移动到游标中的第一项,我使用:c.moveToFirst()
其中c
是光标。