【问题标题】:Android: Need Advice on SQLite, searching slowAndroid:需要关于 SQLite 的建议,搜索缓慢
【发布时间】:2012-02-02 03:27:03
【问题描述】:

我必须搜索一个包含 26024 个条目并且还在计数的数据库。过去它的速度很快,但记录较少,但现在需要 10 秒,并且会减慢应用程序的速度。我想知道是否可以就如何加快流程或我是否做错了什么获得建议。这是代码。

            while (cursor.moveToNext()) {
                 String word = cursor.getString(0);
                 if (word.equals(input)) {
                       String nikus = cursor.getString(1);
                               String def = cursor.getString(2);
                   ret.append(" " + nikus + "\n"+ def + "\n");
                   g = null;
            }

编辑: 在我的数据库中,我有一个定义表,表中有 3 个字段,一个是要比较的单词,第二个是完整的单词,第三个是定义本身。希望对大家有所帮助。

    CREATE TABLE [definitions] (
  [word] TEXT, 
  [fullword] TEXT, 
  [definition] TEXT);

编辑:这是我得到的错误 01-04 00:47:54.678: E/CursorWindow(4722): 需要增长: mSize = 1048576, size = 17, freeSpace() = 13, numRows = 15340

【问题讨论】:

  • 你可以把这个方法放到另一个线程中。
  • 把上面描述的代码放到run()中,然后调用start()。
  • 如果你不介意我问,这将如何加快搜索过程?
  • 看起来您正在执行全表扫描,遍历表中的每个条目。您应该将处理从您的应用程序推到 sqlite 引擎级别。发布您的数据库架构和查询,以便我们帮助您提高性能。
  • @Freddy 我建议您对数据库基础知识进行一些简单的阅读。我并不是说这是侮辱性的,但是您对数据库不按字母顺序的评论表明对关系数据库的工作方式确实缺乏了解。除非您添加索引,否则就数据库而言,您的数据始终是无序的,无论您插入数据时是否按字母顺序排列。

标签: android performance sqlite search optimization


【解决方案1】:

laalto 上面的评论是正确的。您应该运行一个带有 where 子句的 select,它只拉回 word 等于输入的行(不要忘记区分大小写。) word 列上的索引将有助于查询更快。

【讨论】:

  • 一个字多的话怎么办?
  • @Freddy 您可以使用 IN 子句。即 WHERE [word] IN (input1, input2, input3, etc...)
猜你喜欢
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多