如果我有:
class Address(models.Model):
state = models.CharField(max_length=2)
city = models.CharField(max_length=50)
street = models.CharField(max_length=50)
和一个更有效的大型数据集:
Address.objects.filter(state__exact='xx').filter(city__exact='somewhere').filter(street__exact='some street')
OR
Address.objects.filter(state__exact='xx', city__exact='somewhere', street__exact = 'some_street')
答案 0 :(得分:4)
应该构造相同的QuerySet
,因此它应该是相同的。由于3个方法调用而不是1,您可能会有微小的差异,但就数据库查询时间而言,您将看不到任何差异。
如果存在差异,可能会在某处出现错误。
答案 1 :(得分:2)
在我的测试中,后一个查询大约占前者的1/3。
使用包含11,695个条目的模型。
class TimeZip(models.Model):
zipcode = models.SlugField(max_length=5)
timezone = models.IntegerField(default=-5)
state = models.CharField(max_length=2)
city = models.CharField(max_length=50)
然后测试:
Timer("TimeZip.objects.filter(state__iexact='xx')\
.filter(city__iexact='somewhere')\
.filter(timezone__iexact='est')",
"from shows.models import TimeZip"
).timeit(1000)
导致 1.2074651718139648 秒的时间,而
Timer("TimeZip.objects.filter(state__iexact='xx',
city__iexact='somewhere',
timezone__iexact='est')",
"from shows.models import TimeZip"
).timeit(1000)
导致时间 0.4363691806793213 秒。
相当显着的差异!