Страница 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
это условие на совпадение строк