Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 516
1

SQLite. Жутко тормозит Cursor

02.01.2014, 13:47. Просмотров 1011. Ответов 7
Метки нет (Все метки)

Выполняю запрос к бд с большими объемами данных, связывая левым соединением несколько таблиц.
Выяснил, что запрос выполняется быстро, а тормозит курсор.
В выборке может и не быть строк, но первое обращение к курсору (cursor.getCount() или cursor.moveToNext) занимает 900 мсек!
В чем причина и что можно сделать?

Добавлено через 47 минут
А может на самом деле запрос выполняется не в момент вызова "cursor = database.rawQuery()", а при обращении к полученному курсору?
Тогда объясняется подозрительно быстрое получение курсора и затем долгое обращение к нему.

Добавлено через 13 часов 20 минут
Так и есть.
Добавил индекс по одному из полей, участвующих в соединении и скорость многократно увеличилась.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2014, 13:47
Ответы с готовыми решениями:

Cursor
Подскажите как быть дальше. Есть БД, к ней прикрутил курсор DB db; ...

Cursor
Пытаюсь курсором передать данные, но что то ему не нравится Вот так передаю ...

ArraList or Cursor
Вечер добрый. есть быстрый метод поиска, такого элемента, в ArrayList или...

RawQuery using cursor
Здравствуйте. Я сформировал запрос в БД : Cursor cursor2 =...

Cursor из нескольких таблиц
Добрый день. Есть два класса Question and Answer. Question соответсвенно...

7
VEINHORN
543 / 92 / 49
Регистрация: 16.12.2011
Сообщений: 317
03.01.2014, 19:07 2
Код в студию. Всмысле нужен код для того чтобы как-то помочь.
0
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 516
03.01.2014, 22:46  [ТС] 3
Цитата Сообщение от VEINHORN Посмотреть сообщение
Код в студию. Всмысле нужен код для того чтобы как-то помочь.
Да вроде бы и вопросов больше нет.
Я пришел к выводу, что в реальности запрос выполняется не при получении курсора, а при первом обращении к данным, которые должны быть получены запросом (по крайней мере других мыслей нет).
До этого долго не мог понять в чем дело, т.к. искал причину тормозов не в том месте, поэтому сначала и не добавлял индексы.
0
VEINHORN
543 / 92 / 49
Регистрация: 16.12.2011
Сообщений: 317
03.01.2014, 22:56 4
Slon747, запрос выполняется при вызове метода rawQuery()
0
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 516
04.01.2014, 17:53  [ТС] 5
Цитата Сообщение от VEINHORN Посмотреть сообщение
Slon747, запрос выполняется при вызове метода rawQuery()
Android 4.1.1
Вот вернул назад замер производительности и удалил индексы:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String query = "SELECT ...";
 
//время до выполнения запроса
long time1 = currentTimeMillis();
 
Cursor cursor = database.rawQuery(query, null);
 
//время после выполнения запроса
long time2 = currentTimeMillis();
 
int countRows = cursor.getCount();
 
//время после получения кол-ва возращаемых запросом строк
long time3 = currentTimeMillis();
 
//вывод результатов производительности на экран
Toast.makeText(this, "1: " + (time2 - time1) + "\n2: " + (time3 - time2), Toast.LENGTH_LONG).show();
При выполнении запроса на устройстве получаю от Toast:
1: 1
2: 1043


То-же самое, если просто перебирать полученные записи (записей в результате может быть от 0 до нескольких).
0
VEINHORN
543 / 92 / 49
Регистрация: 16.12.2011
Сообщений: 317
04.01.2014, 18:58 6
Slon747, чтобы сказать наверняка надо смотреть исходники.
0
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 516
04.01.2014, 19:10  [ТС] 7
Цитата Сообщение от VEINHORN Посмотреть сообщение
Slon747, чтобы сказать наверняка надо смотреть исходники.
Исходники чего?
0
VEINHORN
543 / 92 / 49
Регистрация: 16.12.2011
Сообщений: 317
04.01.2014, 19:28 8
Slon747, исходники Android.
0
04.01.2014, 19:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2014, 19:28

Заполнить RecyclerView из Cursor
Ребят подскажите плз, есть ли способы закинуть данные с бд типа Cursor в список...

Рэндомно забрать из cursor
Доброго времени! Мне нужно рэндомно забрать из cursor слово и заполнить буквами...

Получение данных из cursor
У меня огромный вопрос по работе с SQLite, а именно Cursor. В общем то при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru