SQLite Query: огромное замедление от браузера до Android - PullRequest
1 голос
/ 30 января 2012

Я занимаюсь разработкой приложения, которое берет необработанные данные о транзите и отображает расписание предстоящих поездов.Я использую следующий запрос для получения списка станций (из таблицы, содержащей приблизительно 50 000 записей для времени остановки):

SELECT DISTINCT SUBSTR(stops._id, 0, LENGTH(stops._id)) as _id, stops.stop_name 
FROM trips, stop_times, stops                                  
WHERE trips._id = 'B'
AND trips.trip_id = stop_times._id 
AND stop_times.stop_id = stops._id

Я запустил этот запрос в браузере SQLite, и он был выполнен примерно за 0,8 секунды.Но когда я выполняю его в своем классе DatabaseHelper с помощью rawQuery (), на моем физическом устройстве это занимает более 5 минут.Я добавил несколько операторов регистрации, чтобы увидеть, где происходило замедление, и оказалось, что это сам запрос, который занимает много времени, а не инфляция представления.Когда я выполняю тот же запрос без опции DISTINCT, он выполняется примерно за 1 секунду.

Я мог понять, что библиотека Android работает немного дольше, чем браузер, но она не должна быть в несколько сотен раз медленнее.Есть ли что-то в опции DISTINCT, которая вызывает это?

1 Ответ

0 голосов
/ 30 января 2012

DISTINCT требуется время для обработки, так как это вопрос сортировки и выбора. В случае, если у вас есть огромные данные, DISTINCT только сделает это еще хуже. Я бы предложил вам разбить ваш запрос на более мелкие части и / или выполнить фильтрацию прагматично

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...