PERFORMANCE Вызов несколько раз базы данных posgres для получения фильтрованных запросов по сравнению с запросом всех объектов и фильтрацией в моем представлении django

Я работаю в проекте Django, и у него есть база данных postgreSQL.

Я вызываю несколько раз модель, чтобы отфильтровать результаты:

latest = Product.objects.all().order_by('-update_date')[:4]
best_rate = Product.objects.all().order_by('rating')[:2]
expensive = Product.objects.all().order_by('-price)[:3]

Но мне интересно, не лучше ли с точки зрения производительности и потребления ресурсов просто сделать 1 запрос и получить все объекты из базы данных и сделать фильтрацию внутри моего представления Django.

all = Product.objects.all()
# Do some filtering here iterating over variable all

Как вы думаете, какое из этих приближений было бы наилучшим? Или у вас есть лучший вариант?

Второй способ, который вы предложили, будет лучше, вы можете сделать так, я думаю:

products_all = Products.objects.all()
latest = products_all.order_by('-update_date')[:4]
best_rate = products_all.order_by('rating')[:2]
expensive = products_all.order_by('-price')[:3]

Смысл технологии баз данных в том, чтобы позволить вашей программе работать с очень большими наборами данных. Ваше требование - извлечь самые новые / лучшие / дешевые товары из списка товаров.

Вы должны сделать это с помощью одной операции запроса или трех? Это зависит от того, сколько продуктов будет у вас в списке, когда вы будете работать в масштабе. Если вы знаете, что у вас никогда не будет больше, чем, скажем, 100 продуктов, получите данные с помощью одного запроса и фильтра в вашей программе Django. Но если в конечном итоге у вас будут тысячи продуктов, используйте три отдельных фильтра

Вы же не хотите, чтобы ваше приложение занимало все больше и больше оперативной памяти при увеличении его масштаба.

Вернуться на верх