A .filter(..)
- это , а не , реализованный для выполнения фильтрации на уровне Django / Python: фильтрация выполняется в базе данных с предложением WHERE
(или HAVING
). Базы данных - это системы, предназначенные для хранения, извлечения и агрегирования больших объемов данных.
Если вы часто сортируете по значению approved
, вы добавляете индекс для столбца:
class Post(models.Model):
approved = models.BooleanField(<b>db_index=True</b>)
В этом случае в базу данных будет добавлена структура индексации, которая сделает фильтрацию более эффективной.
Обычно лучше фильтровать базу данных, поскольку это означает, что базе данных необходимо передавать меньше записей в Python /. Django слой, а кроме того Django должен десериализовать меньше объектов в объекты памяти. Таким образом, даже если фильтрация с использованием списков была бы такой же быстрой, как фильтрация по базе данных, она все равно снизила бы эффективность, потому что Python / Django сначала должен десериализовать больше элементов. Если количество элементов растет, это в конечном итоге приведет к проблемам с памятью, поскольку вы не можете хранить все записи одновременно в памяти.