Можно ли ускорить поиск по бд

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
Bulavin52
Сообщения: 5
Зарегистрирован: 05 дек 2014, 09:57

Можно ли ускорить поиск по бд

Сообщение Bulavin52 » 10 фев 2015, 12:05

У меня есть приложение которое выполняет поиск по бд. Поиск выполняется курсором по одной таблице, строк от 20 000 до 30 000. Поиск выполняется примерно секунд 20-30, можно ли как то ускорить поиск?
Планшеты на которых работает программа не очень мощные, 512-1024 оперативы, процы 2-ух ядерные 1.2.
Бд сделана в sqlite, и я ее загружаю в папку "assets".

Заранее спасибо за любую информацию по делу.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Можно ли ускорить поиск по бд

Сообщение Mikhail_dev » 10 фев 2015, 12:17

Т.е. вы хотите чтобы вам помогли по БД без понимания что вы ищете и как ищете?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Можно ли ускорить поиск по бд

Сообщение Foenix » 10 фев 2015, 12:36

Совсем ты неправильно ищешь, я уверена. Что значит курсором? запросом надо искать, а курсор - это РЕЗУЛЬТАТ запроса/поиска. Делается это все за мгновения на таком количестве записей.
Приводи код и задачу - что там ты разыскиваешь.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Можно ли ускорить поиск по бд

Сообщение doter.ua » 10 фев 2015, 12:46

Целых 20 тыс записей, думаю тебе нужен мейнфрейм за пару $млрд , который будет искать в БД и отсылать результат.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Bulavin52
Сообщения: 5
Зарегистрирован: 05 дек 2014, 09:57

Re: Можно ли ускорить поиск по бд

Сообщение Bulavin52 » 10 фев 2015, 12:53

Я сравниваю каждое значение с переменной "StrOut"

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

Cursor friendCursor = database.query(TABLE_NAME,new String[] 
   {FRIEND_ID, ID_DBTR_SURNAME, ID_DBTR_NAME, ID_DBTR_PATROMYMIC, ID_DBTR_BORN, ID_DBTR_ID_SERIAL, ID_DBTR_ID_NUMBER, DOC_INFO, STATUS},
   null, null, null, null, STATUS);
friendCursor.moveToFirst();

if(!friendCursor.isAfterLast()) {
   do {
      StrOut = friendCursor.getString(1);

      if (StrOut.compareToIgnoreCase (search) == 0){
        ...
      }
   } while (friendCursor.moveToNext());

Задача показать все строки в которых содержаться искомое слово в одной таблице.
Например: в таблице фамилия и имя, поиск идет по фамилии, результат должен содержать все строки с искомой фамилией.

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Можно ли ускорить поиск по бд

Сообщение doter.ua » 10 фев 2015, 13:00

Bulavin52 писал(а):Я сравниваю каждое значение с переменной "StrOut"

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

Cursor friendCursor = database.query(TABLE_NAME,new String[] 
   {FRIEND_ID, ID_DBTR_SURNAME, ID_DBTR_NAME, ID_DBTR_PATROMYMIC, ID_DBTR_BORN, ID_DBTR_ID_SERIAL, ID_DBTR_ID_NUMBER, DOC_INFO, STATUS},
   null, null, null, null, STATUS);
friendCursor.moveToFirst();

if(!friendCursor.isAfterLast()) {
   do {
      StrOut = friendCursor.getString(1);

      if (StrOut.compareToIgnoreCase (search) == 0){
        ...
      }
   } while (friendCursor.moveToNext());

Задача показать все строки в которых содержаться искомое слово в одной таблице.
Например: в таблице фамилия и имя, поиск идет по фамилии, результат должен содержать все строки с искомой фамилией.
Почитайте про SELECT FROM WHERE выборку.
Например:

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

        SQLiteDatabase db = this.getReadableDatabase();
        String selectQuery = "SELECT * FROM 'myTable' WHERE name = 'иван';
        Cursor cursor =  db.rawQuery(selectQuery, null);
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Можно ли ускорить поиск по бд

Сообщение Foenix » 10 фев 2015, 13:05

ни в коем случае так не делай. Читай уроки тут - все это есть, как делать выборку только тех записей, которые тебе нужны.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Bulavin52
Сообщения: 5
Зарегистрирован: 05 дек 2014, 09:57

Re: Можно ли ускорить поиск по бд

Сообщение Bulavin52 » 10 фев 2015, 13:10

Спасибо за советы, буду читать.

Bulavin52
Сообщения: 5
Зарегистрирован: 05 дек 2014, 09:57

Re: Можно ли ускорить поиск по бд

Сообщение Bulavin52 » 10 фев 2015, 16:22

Спасибо всем большое!
Реализовал так:

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

selection = "id_dbtr_surname = ?";
selectionArgs = new String[] { search };
c = database.query("friends", null, selection, selectionArgs, null, null, null);
Работает практически мгновенно :)


Bulavin52
Сообщения: 5
Зарегистрирован: 05 дек 2014, 09:57

Re: Можно ли ускорить поиск по бд

Сообщение Bulavin52 » 10 фев 2015, 17:49

это условие на совпадение строк

Ответить