Страница 1 из 1

Индексы в БД SQLite

Добавлено: 12 ноя 2012, 19:14
neoksi
Пытаюсь оптимизировать выборку из таблицы используя индексы, но что-то разобраться не могу как это сделать в SQLite под Андроид, есть у кого ссылки на подробные статьи по этому поводу?

У меня вылетает фатальная ошибка, после того как в sql запрос, после имени таблицы добавляю:

Код: Выделить всё

WITH (INDEX(my_index))
Может я что-то не так делаю?

Re: Индексы в БД SQLite

Добавлено: 14 ноя 2012, 12:01
damager82
neoksi писал(а):Пытаюсь оптимизировать выборку из таблицы используя индексы, но что-то разобраться не могу как это сделать в SQLite под Андроид, есть у кого ссылки на подробные статьи по этому поводу?

У меня вылетает фатальная ошибка, после того как в sql запрос, после имени таблицы добавляю:

Код: Выделить всё

WITH (INDEX(my_index))
Может я что-то не так делаю?
Смотрите доки на их сайте, там все достаточно подробно, хоть и на английском
http://www.sqlite.org/lang_indexedby.html

Re: Индексы в БД SQLite

Добавлено: 14 ноя 2012, 13:08
neoksi
damager82 писал(а): Смотрите доки на их сайте, там все достаточно подробно, хоть и на английском
http://www.sqlite.org/lang_indexedby.html
Тобишь после имени таблицы мне необходимо вместо 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 не предлагать, уже задействован под другие нужды.