lingyuejn 2021-12-30 09:25 采纳率: 0%
浏览 34

20万行的slqite3数据库能否2ms内完成查询结果并输出?详情如下:

各位神




```节日快乐:

        手机端的sqlite3 存了20万行左右的英文、汉字‘1-4个)为主、大约10列左右的数据库,建立了数字或者英文索引,每次查询几乎都需要like%查询,需要获取查询结果耗时在2ms内。

现在有两个问题:1.索引建立有时间吗?我发现第一次查时无论如何都要耗费20-40ms,是索引写入内存的必须时间吗?即使提前进行虚拟查询似乎也不起作用。

2.现在的查询时间最快也要在15-60ms之间,有什么好办法吗?

下面是我中等复杂的sql查询语句,其中pre_first字段是索引

else {
    if (!separator_sp) {
        String F2 = f1+STRB.substring(valueLength_fst,valueLength_fst+1);
        String F3 = F2+ STRB.substring(sum_fs,sum_fs+1);
        String s = STRB.substring(0,separatorWL+1);
        String s1 = STRB.substring(0, valueLength_fst);
        String s2 = STRB.substring(0, sum_fs);
        String sql = "select word,pinyin from test02 where pre_first in" +
                "('"+F3+"','"+F2+"','"+f1+"') and (py_pre like " +
                "'" + s + "%' or py_pre in('" + s2 + "','" + s1 + "')) " +
                "order by score,null";
        Cursor cu;
        Log.v(TAG, "row2440"+" F3:"+F3+"; F2:"+F2);
        cu = db.rawQuery(sql,null);
        while (cu.moveToNext()) {
            String hanziIndex1 = cu.getString(cu.getColumnIndex("word"));
            String hanziIndex2 = cu.getString(cu.getColumnIndex("pinyin"));
            list_decodingWord.add(hanziIndex1);
            list_decodingPY.add(hanziIndex2);
            if (string_comosingPY.length() == 0) {
                if (hanziIndex2.length() > separatorWL + 2) {
                    string_comosingPY.append(hanziIndex2.substring(0, separatorWL + 3));
                } else {
                    string_comosingPY.append(hanziIndex2);
                }
            }
        }
        //Log.v(TAG, "row2093"+" strCom:"+string_comosingPY+"; s:"+s+"; s1:"+s1+"; s2"+s2);
        cu.close();
        long endTime = System.currentTimeMillis();
        Log.e(TAG,"ROW2450 汉字数据库搜索运行时间: " + (endTime - startTime) + "ms");
        if (string_comosingPY.length() == sum_fs+1) {
            string_comosingPY.append("'");
            string_comosingPY.append(STRB.substring(separatorWL, separatorWL+1));
        } else {
            if(string_comosingPY.length()==valueLength_fst){
                string_comosingPY.append("'");
                string_comosingPY.append(str_fstSec);
                string_comosingPY.append("'");
                string_comosingPY.append(STRB.substring(separatorWL, separatorWL+1));
            }
        }
        //Log.v(TAG, "row2097");
    }
}

```

  • 写回答

2条回答 默认 最新

  • 猫巳 Java领域优质创作者 2021-12-30 09:42
    关注

    加索引为word,pinyin,做全文覆盖试试。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月30日

悬赏问题

  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)