Sqlite подзапросы: в одном большом запросе или в цикле for? - PullRequest
1 голос
/ 16 июня 2009

Я планировал это сравнить, но так как это большая работа, я хотел бы проверить, не пропустил ли я ранее никакого очевидного ответа.

У меня огромный запрос, в котором содержится дополнительная информация для каждой строки подзапроса.

Каждая строка затем используется в ListAdapter, который подключен к ListView, поэтому другой цикл принимает каждую строку одну за другой, чтобы сделать ее ListItem.

Что вы считаете более эффективным:

  • Хранение подзапросов в беспорядке SQL с расчетом на механизм SQL для оптимизации.
  • Извлечение подзапросов в цикле ListAdapter, поэтому мы лениво загружаем детали на дисплей: гораздо удобнее для чтения, но, боюсь, слишком много попаданий замедлит процесс.

Две важные вещи:

  • Я не могу переписать большой кусок SQL, чтобы избавиться от подзапросов. Я знаю, что так будет лучше, но я не смог этого сделать.
  • Насколько я могу судить, список не будет содержать более 1000 элементов, и это приложение для настольного компьютера, поэтому параллелизма нет. Это даже важно, чтобы заботиться о перфе в этом случае? Если нет, я все равно был бы заинтересован в ответе для сайта с высоким трафиком. Приятно знать ...

Ответы [ 2 ]

2 голосов
/ 18 июня 2009

SQlite - удивительно хороший маленький движок, но на самом деле речь не идет о дополнительных умных оптимизациях, и я бы не стал рассматривать его как «веб-сайт с высоким трафиком». Один большой плюс (для использования в пределах его ограничений) заключается в том, что он может выполняться внутри процесса, так что накладные расходы на несколько запросов действительно невелики по сравнению с одним большим запросом; если это проще всего кодировать, для вашего конкретного случая использования я бы действительно рассмотрел это (и, как вы намекаете, выполнение «ленивой загрузки» может на самом деле ускорить появление первого экрана данных!). Как вы подозреваете, маловероятно, что в вашем случае это будет узким местом с точки зрения производительности, так что переход на более простое и, следовательно, более надежное кодирование является важным плюсом.

Если бы я делал сайт с большим трафиком и использовал более богатый и «тяжелый» движок, такой как PosgtreSQL, Oracle, SQL Server или DB2, я бы доверял оптимизатору гораздо больше. Однако я заметил одну вещь: я часто (увы, не всегда) могу превратить подзапросы в объединения, и это часто приводит к повышению производительности (я думаю, оптимизаторам проще использовать хорошие индексы - - Я никогда не программировал оптимизатор SQL, но у меня сложилось впечатление, что я смотрю на планы выполнения запросов от многих движков для альтернативных форм запросов ... которые, конечно, предполагают, что у вас хорошие показатели! -) - это Конечно, необходимо подтвердить с помощью эталона конкретного случая, о котором идет речь, но это будет мое первоначальное рабочее предположение.

1 голос
/ 16 июня 2009

Как насчет использования курсоров?

Я бы предпочел использовать большой запрос и позволить моему движку SQL оптимизировать мой запрос. Также я не могу вспомнить пример, когда лучше сделать цикл вне SQL вместо использования «большого» запроса или использования курсоров.

Но лучший способ узнать, что лучше, - это сравнить его.

Удачи!

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