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

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

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

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

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

Добавлено: 10 фев 2015, 12:17
Mikhail_dev
Т.е. вы хотите чтобы вам помогли по БД без понимания что вы ищете и как ищете?

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

Добавлено: 10 фев 2015, 12:36
Foenix
Совсем ты неправильно ищешь, я уверена. Что значит курсором? запросом надо искать, а курсор - это РЕЗУЛЬТАТ запроса/поиска. Делается это все за мгновения на таком количестве записей.
Приводи код и задачу - что там ты разыскиваешь.

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

Добавлено: 10 фев 2015, 12:46
doter.ua
Целых 20 тыс записей, думаю тебе нужен мейнфрейм за пару $млрд , который будет искать в БД и отсылать результат.

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

Добавлено: 10 фев 2015, 12:53
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());

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

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

Добавлено: 10 фев 2015, 13:00
doter.ua
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);

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

Добавлено: 10 фев 2015, 13:05
Foenix
ни в коем случае так не делай. Читай уроки тут - все это есть, как делать выборку только тех записей, которые тебе нужны.

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

Добавлено: 10 фев 2015, 13:10
Bulavin52
Спасибо за советы, буду читать.

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

Добавлено: 10 фев 2015, 16:22
Bulavin52
Спасибо всем большое!
Реализовал так:

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

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

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

Добавлено: 10 фев 2015, 16:52
Mikhail_dev
У вас же еще там какое-то условие

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

Добавлено: 10 фев 2015, 17:49
Bulavin52
это условие на совпадение строк