Android SQLite查找速度非常慢

时间:2012-02-24 11:39:01

标签: android sqlite listview search

我正在尝试在Android上创建字典应用程序。我有一个80000篇文章的数据库。当用户在EditText中输入单词时,我想在ListView中显示建议,为此,我使用以下代码:

    public Cursor query(String entry){
             String[] columns = new String[]{"_id", "word"};
             String[] selectionArgs = new String[]{entry + "%"};
             return mDB.query("word", columns, "word LIKE ?", selectionArgs, null, null, null);
    }

我使用SimpleCursorAdapter作为ListView。

问题是建议出现得很晚。我认为SQL中的原因是LIKE。我不知道有任何其他方法可以做到这一点。我能做些什么来提高获得建议的表现吗?

3 个答案:

答案 0 :(得分:4)

您可能会发现在word列上添加索引会有很大帮助。请参阅the documentation

所以你可以在创建表之后尝试这个:

CREATE INDEX word_idx ON word (word);

(注意:我不确定是否有名为word的表和列会导致语法问题。试试看看!)

答案 1 :(得分:1)

作为一种简单的替代方法,您可以使用Limit按照任意顺序限制建议,如以下帖子所示:Using the LIMIT statement in a SQLite query

mDB.query("word", columns, "word LIKE ?", selectionArgs, null, null, null, "LIMIT 150" );

由于所有结果都是同等有效的建议,因此订单无关紧要。

此外,您还无法显示大量的建议,因此您可以根据您的用户界面使用一些固定的限制数量。我以 150 为例。

希望有所帮助......

答案 2 :(得分:1)

除了显而易见的索引之外,如果这是一个字典,您应该使用MATCH而不是like来使用全文搜索。 Android应该支持FTS3。

在此处查看http://www.sqlite.org/fts3.html以及有关Android上的fts3的一些答案。

似乎单词应该以字符串开头。 也许这种技巧可能会有所帮助:SQLite FTS3 simulate LIKE somestring%