Пожалуйста, не , а , используйте len(..)
здесь , поскольку это приведет к загрузке 20 миллионов записей в памяти.
Вы можете получить количество записей с помощью .count()
[Django -doc] :
from myapp.models import LargeModel
LargeModel.objects<b>.count()</b>
Этот запрос будет выглядеть так:
SELECT <b>COUNT(*)</b>
FROM myapp_largemodel
Если вы используете len(..)
Django, оценит набор запросов, это означает, что он будет выполнять запрос, подобный SELECT * FROM myapp_largemodel
. Таким образом, он сначала загрузит ~ 20 миллионов записей в память (если это вообще возможно), а затем вычислит len(..)
в этом списке. Но для этого потребуются большие объемы памяти, циклы ЦП и пропускная способность сети. Если вы все равно не планируете что-либо делать с этими записями, это неэффективное использование ресурсов.
или как документация по .count()
[Django -doc] говорит:
Вызов count()
выполняет SELECT COUNT(*)
за сценой, поэтому вы должны всегда использовать count()
вместо загрузки всей записи в Python объектов и вызов len()
результата (если вам все равно не нужно загружать объекты в память, в этом случае len()
будет быстрее).