2016-12-29 3 views
0

У меня есть база данных, состоящая из столбцов:Какой метод более эффективен для Android SQLite?

bookId, pageNbr, text 

где BookID и pageNbr индексируются.

Теперь, при использовании его в качестве модели данных для моего списка зрения, я должен инициализировать курсор с помощью:

SELECT bookId, pageNbr, text 
FROM table 
WHERE bookId BETWEEN 1 AND 5 
AND pageNbr BETWEEN 100 AND 500 

Или я должен получить каждый элемент для каждой строки, каждый раз GetView называется с помощью этого:

SELECT bookId, pageNbr, text 
FROM table 
WHERE bookId = VAR_BOOK_ID 
AND pageNbr = VAR_PAGE_NBR 

Есть ли разница в производительности? (возможно, накладные расходы, если таковые имеются для каждого запроса?)

+0

Конечно, есть накладные расходы на производительность, из которых один предмет имеет потенциально более тысячи –

+0

Но как насчет по сравнению с гораздо большим запросом в качестве первого? –

+0

Вот что я говорю - первый способ менее оптимален, но по крайней мере вы только попадаете в базу данных один раз. –

ответ

1

Использовать любой запрос проще в обращении (т. е. первый). Это приводит к наиболее эффективной производительности разработки.

Подумайте об оптимизации только тогда, когда вы Измерение актуальная проблема.

Что касается запросов: только один МЕЖДУ может быть оптимизирован с индексом, поэтому вам нужно индексировать только столбец с большей избирательностью. И выполнение двух запросов с = работает лучше всего, если есть индекс с двумя столбцами.

+0

Можете ли вы рассказать мне простыми словами, что такое избирательность? Является ли столбец наибольшим количеством возможных значений, которые имеют наибольшую селективность? –

+0

Столбец, в котором сравнение отфильтровывает большинство строк (так что как можно меньше строк нужно прочитать из фактической таблицы). –

Смежные вопросы