小编Ego*_*ler的帖子

姜戈过滤器。什么更有效 - .filter(date__range) 或 .all() 并通过 Python 过滤

我有一个相当大的数据库表(1M+ 行),在 Django 中过滤结果时遇到问题。

目前过滤逻辑如下:

results = Result.objects.filter(date__range=(date_from, date_to))
for result in results:
    # do stuff
Run Code Online (Sandbox Code Playgroud)

在某些时期它会导致崩溃(可能是由于内存耗尽)

我想知道,用以下内容替换它会更有效:

results = Result.objects.all().order_by('-id')
for result in results:
    if result.date > date_to:
        continue
    if result.date < date_from:
        break
    # do stuff
Run Code Online (Sandbox Code Playgroud)

理论上,由于 .all() 创建了一个惰性 QuerySet,它的性能可能比在 1M+ 行的数据库中进行范围过滤要好。了解两种情况下的内存消耗也会很有趣。

也许还有另一种解决方案如何更有效地在恒定内存中做到这一点?

谢谢!

python mysql database django memory-management

3
推荐指数
1
解决办法
34
查看次数

标签 统计

database ×1

django ×1

memory-management ×1

mysql ×1

python ×1