gpt4 book ai didi

android - 如何提高 Sqlite/Android 中 SELECT 查询的性能?

转载 作者:行者123 更新时间:2023-11-29 22:13:24 24 4
gpt4 key购买 nike

我在 Sqlite 和 Android 中使用简单的 SELECT 查询时性能不佳,并且可能出现奇怪的行为。 SqliteDatabase.query() 仅在 1 毫秒内执行我的查询,但使用 Cursor.get*() 获取结果需要 150 多毫秒才能返回仅 8 行!

我正在尝试查找 english 表中列 word 以“prefix”(任意字符串)开头的所有行,按 row列,只返回前8个结果。

这是我的代码:

String columns[] = {"word", "rank"};
Cursor cursor = mDB.query("english", columns, "word LIKE '" + prefix + "%'", null, null, null, "rank,word", "8");

// It takes only 1 ms to get here

String word = "";
int rank = 0;
if (cursor.moveToFirst()){
do {
word = cursor.getString(0);
rank = cursor.getInt(1);
}
while(cursor.moveToNext());
}

cursor.close();

// It takes over 150 ms to get here!

english 的表定义是:

CREATE TABLE en (_id INTEGER PRIMARY KEY, word TEXT, rank INTEGER)

它包含大约 65,000 个条目。它还在 wordrank 上建立了索引,同时为两者都建立了第三个索引(我快绝望了!):

CREATE INDEX "rank" ON "en" ("rank" ASC)
CREATE INDEX "word" ON "en" ("word" ASC)
CREATE INDEX "word_rank" ON "en" ("word" ASC, "rank" ASC)

提前致谢!

最佳答案

查询方法实际上并不检索所有数据,游标在行中移动时检索数据。因此 Cursor.move*() 方法比查询慢是有道理的。

这种“延迟加载”概念有助于节省内存,因为只在需要时检索相关数据。

至于性能,您确实没有做错任何事情。你在模拟器上试试这个吗?也许在实际设备上尝试并测试性能。

关于android - 如何提高 Sqlite/Android 中 SELECT 查询的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9058650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com