Производительность Django в запросе необработанной суммы sql по сравнению с использованием циклов

avatar
Bahman Rouhani
8 апреля 2018 в 06:35
292
1
0


Я знаю, что в целом рекомендуется полагаться на вашу базу данных для таких действий, как получение суммы записей. Однако здесь особая ситуация:
Я использую необработанный sql с django и Сначала я хочу получить список записей, скажем, мне нужен список книг, их цены и их проценты скидок, после чего я хочу получить сумму цен и сумму скидок (цена * цена со скидкой для каждой книги). например:

Один из способов сделать это — использовать функцию SQL SUM(), но поскольку у меня уже есть записи, почему бы просто не использовать цикл for для ее вычисления? Я знаю, что база данных должна быть быстрее, но Django требуется некоторое время для подключения к базе данных, а количество книг не так уж много (около 5).
может кто-нибудь помочь мне, какое решение лучше?
любая помощь приветствуется и заранее благодарна.

Источник
Seyed Mohammad Hosseini
8 апреля 2018 в 06:53
1

Я думаю, что эта ссылка может быть вам полезна: [использовать арифметические функции с запросом Django](coderhelper.com/questions/45593440/…)

JPG
8 апреля 2018 в 06:57
1

Я не думаю, что у обоих есть большая разница в производительности в вашем контексте (примерно 5 записей). Но если у вас большой объем данных, используйте SQL Aggregate functions.

Ответы (1)

avatar
Kevin Christopher Henry
8 апреля 2018 в 09:06
1

Кажется, вы говорите о создании отдельного вызова базы данных для выполнения агрегирования. Ваша интуиция подсказывает, что накладные расходы на выполнение этого вызова намного перевешивают любые другие различия в производительности.

Но вам не нужно делать отдельный вызов; вы можете выполнить агрегацию в том же вызове, который извлекает полные записи. Однако в этом мало смысла, если вы можете просто выполнить агрегацию самостоятельно в Python. Вполне возможно, что для больших объемов данных может быть выигрыш в производительности, если позволить базе данных сделать это, но, с другой стороны, база данных, скорее всего, будет узким местом производительности, чем ваш сервер приложений.

С пятью рядами производительность в любом случае не будет иметь значения. Лично я предпочел бы сделать это на Python, так как это более мощный и гибкий язык, чем SQL, но на самом деле это не имеет значения.