Форум сайта python.su
Кто ни будь знает, при большом объёме быза данных производительность lazy запросов отличается от производительности обычных? То есть будет ли разница и в чью пользу по скорости между:
a = Model.objects.filter(p1='s1').filter(p2='s2').filter(p3='s3') b = Model.objects.all() b = b.filter(p1='s1') b = b.filter(p2='s2') b = b.filter(p3='s3')
Отредактировано Atterratio (Май 17, 2012 09:44:59)
Офлайн
По-моему между a и b никакой разницы. Запрос к базе ни в том ни в другом случае пока не выполнялся.
https://docs.djangoproject.com/en/1.4/ref/models/querysets/#when-querysets-are-evaluated
Отредактировано svas (Май 17, 2012 09:49:32)
Офлайн
lazy:
for item in Model.objecta.filter(p1='s1'): pass
for item in list(Model.objecta.filter(p1='s1')): pass
Офлайн
Объясните в чем разница, кроме преобразования QuerySet в list?
Офлайн
При преобразовании мы проходимся по QuerySet'у, а значит пользы от того, что это генератор, никакой. Это как range vs xrange.
Документация:
list().
Force evaluation of a QuerySet by calling list() on it. For example:Be warned, though, that this could have a large memory overhead, because Django will load each element of the list into memory. In contrast, iterating over a QuerySet will take advantage of your database to load data and instantiate objects only as you need them.entry_list = list(Entry.objects.all())
Отредактировано fata1ex (Май 20, 2012 21:14:09)
Офлайн
Вот это:
for item in Model.objects.filter(p1='s1'): pass
for item in Model.objects.filter(p1='s1').iterator(): pass
Офлайн