Ответ на этот вопрос зависит от многих факторов, некоторые из которых следующие:
- База данных, которую вы используете
- Сеть между базой данных и вашим приложением
- Количество строк данных
- Количество уникальных дат в вашем наборе данных
- Что вы планируете делать с данными впоследствии
- Подробная информация о приложение
Рассмотрим следующие варианты использования:
- Если все, что вы делаете, это выборка данных и ничего с этим не делаете, то большую часть времени выбирает все данные сразу быстрее.
data = model.objects.all()
Если вы планируете просто получать агрегированные значения за дату, то быстрее сделать следующее:
data_by_dates = model.order_by('date_created').values(
'date_created'
).annotate(
count=Count('date_created'), total=Sum('amount')
)
Если у вас есть данные за тысячи дат, но данные содержат только несколько строк на дату, и вы собираете строки по дате, то вы также будете подключаться к БД миллион раз. Если у вас есть данные, скажем, всего за 7 дней, но в эту дату есть точка данных в секунду, то вы получите 86400 точек данных, но подключитесь к БД только 7 раз Если у вас есть данные скажем, год, и у вас есть точка данных в секунду, и вы решаете собрать ВСЕ их сразу, тогда это израсходует много памяти сервера. Если вы планируете обрабатывать эти данные в чистом python, то это также будет съедать ваш процессор.
Я мог бы придумать еще много вариантов использования, но если вы не знаете, что на самом деле пытаетесь сделать, и не знаете контекста, трудно сказать, что является «наиболее эффективным». "путь есть.