Страница 1 из 1
Индексы в БД SQLite
Добавлено: 12 ноя 2012, 19:14
neoksi
Пытаюсь оптимизировать выборку из таблицы используя индексы, но что-то разобраться не могу как это сделать в SQLite под Андроид, есть у кого ссылки на подробные статьи по этому поводу?
У меня вылетает фатальная ошибка, после того как в sql запрос, после имени таблицы добавляю:
Может я что-то не так делаю?
Re: Индексы в БД SQLite
Добавлено: 14 ноя 2012, 12:01
damager82
neoksi писал(а):Пытаюсь оптимизировать выборку из таблицы используя индексы, но что-то разобраться не могу как это сделать в SQLite под Андроид, есть у кого ссылки на подробные статьи по этому поводу?
У меня вылетает фатальная ошибка, после того как в sql запрос, после имени таблицы добавляю:
Может я что-то не так делаю?
Смотрите доки на их сайте, там все достаточно подробно, хоть и на английском
http://www.sqlite.org/lang_indexedby.html
Re: Индексы в БД SQLite
Добавлено: 14 ноя 2012, 13:08
neoksi
Тобишь после имени таблицы мне необходимо вместо
WITH использовать
INDEXED BY, попробую и отпишусь, а то 700мс на выполнение 168 запросов многовато

Re: Индексы в БД SQLite
Добавлено: 14 ноя 2012, 14:50
neoksi
Раза с 3го получилось реализовать, пришлось провайдер и хелпер подправить. Но к сожалению, нужного эффекта не дало, все равно теряю на каждой 4-5 операцией с БД 10-30мс.
На сколько смог отследить, теряю время на операции:
Код: Выделить всё
SQLiteDatabase db = dbh.getReadableDatabase();
В контент провайдере. Пока не понял, как тут оптимизироваться...
Re: Индексы в БД SQLite
Добавлено: 16 ноя 2012, 10:19
damager82
neoksi писал(а):Раза с 3го получилось реализовать, пришлось провайдер и хелпер подправить. Но к сожалению, нужного эффекта не дало, все равно теряю на каждой 4-5 операцией с БД 10-30мс.
На сколько смог отследить, теряю время на операции:
Код: Выделить всё
SQLiteDatabase db = dbh.getReadableDatabase();
В контент провайдере. Пока не понял, как тут оптимизироваться...
Транзакции используете? Они значительно ускоряют пакетные операции
Re: Индексы в БД SQLite
Добавлено: 16 ноя 2012, 14:53
rezak90
попробуйте ormLite, она быстрее работает.
Re: Индексы в БД SQLite
Добавлено: 16 ноя 2012, 17:59
neoksi
damager82
Транзакции это мощная штука, но только в том случае, когда ты можешь передать множество запросов одновременно. У меня же работа с БД идет через ContentProvider, там в query можно передать только один запрос за раз, а в этом уже query происходит торможение на строке:
Код: Выделить всё
SQLiteDatabase db = dbh.getReadableDatabase();
Я пока не совсем понимаю можно ли в ContentProvider внедрить собственные методы, помимо стандартных, чтоб потом иметь к ним доступ. Чтоб получить доступ к провайдеру данных мы используем следующую конструкцию:
Код: Выделить всё
ContentResolver nimb = context.getContentResolver();
ContentResolver в свою очередь имеет интерфейсную поддержку только стандартных методов ContentProvider.
Re: Индексы в БД SQLite
Добавлено: 16 ноя 2012, 18:03
neoksi
rezak90 писал(а):попробуйте ormLite, она быстрее работает.
Как надстройка над sqlite может быстрее работать самой sqlite?
Re: Индексы в БД SQLite
Добавлено: 16 ноя 2012, 18:08
rezak90
вы не поверите но может, почитайте про неё
Re: Индексы в БД SQLite
Добавлено: 16 ноя 2012, 18:27
neoksi
rezak90
спорить не буду, но у меня есть свои убеждения. И переписывать действующее приложение на объектную модель бд... не.
У меня проблема не с самой скоростью sqlite, тут все просто прекрасно оказалось. Проблема с падением производительности при открытии БД. Если переформулировать мой изначальный вопрос, то теперь он звучит так:
"Как передать в ContentProvider более одного запроса за раз и вернуть массив ответов?"
Метод bulkInsert не предлагать, уже задействован под другие нужды.