Python 为什么访问Django QuerySet变得非常慢?
我在Django中有一个模型查询:Python 为什么访问Django QuerySet变得非常慢?,python,django,Python,Django,我在Django中有一个模型查询: Query = Details.objects.filter(name__iexact=nameSelected) 我以后会过滤它: Query2 = Query .filter(title__iexact=title0) 然后,我使用以下方式访问它: ...Query2[0][0]... 几天前,它工作得很快。但现在它至少慢了20倍。 我在另一台电脑上测试,它工作得很快 更新:过滤不是延迟的原因,查询[0][0]是原因。 除此之外,它突然变得非常慢,而
Query = Details.objects.filter(name__iexact=nameSelected)
我以后会过滤它:
Query2 = Query .filter(title__iexact=title0)
然后,我使用以下方式访问它:
...Query2[0][0]...
几天前,它工作得很快。但现在它至少慢了20倍。
我在另一台电脑上测试,它工作得很快
更新:过滤不是延迟的原因,查询[0][0]是原因。
除此之外,它突然变得非常慢,而不是随着时间的推移
在我的第一台电脑上,什么会让它这么慢呢?也许你可以在创建查询集时尝试从查询集中列出一个列表,这样你就有了一个真正的列表,而不仅仅是一个懒散的QS
Query2 = list(Query .filter(title__iexact=title0))
最好的方法是避免过滤查询的循环。我所做的是创建一个hashmap字典
dict0 = {}
然后,我在查询中添加了与该项对应的项和数据列表:
dict0 = dict(zip(title0List, DataList))
最后,我使用dict0而不是query,它将速度提高了至少10倍)您的数据库是否变大了,还是两种情况下都是一样的?对名称的过滤将随着记录数的增加而线性增长(除非您有某种索引机制)。Queryset大小是一样的@Pax@WillemVan Onsem筛选不是延迟的原因,查询[0][0]是延迟的原因reason@Nessi:
QuerySet
s是惰性的,因此这意味着只有当您强制求值(例如使用Query2[0]时,Query2
才会在数据库上执行
它将在数据库中对其进行评估。因此Query2
确实不能成为延迟的原因,因为它不会导致到db的往返。是的,这很聪明,我会尝试一下……不幸的是,我会告诉你同样的情况。这取决于db表,非常奇怪……是的,听起来非常奇怪!现在让我们看看你有什么解决方案。。。