Я получаю низкую производительность и, возможно, странное поведение с простым запросом SELECT в Sqlite & Android. SqliteDatabase.query()
выполняет мой запрос всего за 1 мс, но выборка результатов с Cursor.get*()
занимает более 150 мс, чтобы вернуть только 8 строк!
Я пытаюсь найти все строки в таблице english
, где столбец word
начинается с "префикса" (произвольная строка), отсортировать результаты по столбцу 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 записей. Он также индексирует word
и rank
, с третьим индексом для обоих (я был в отчаянии!):
CREATE INDEX "rank" ON "en" ("rank" ASC)
CREATE INDEX "word" ON "en" ("word" ASC)
CREATE INDEX "word_rank" ON "en" ("word" ASC, "rank" ASC)
Заранее спасибо!