我需要找到一个序列号和对象的列表,每个人有一个序列号之间的匹配:查询集优化
型号:
class Beacon(models.Model):
serial = models.CharField(max_length=32, default='0')
首先,我写道:
for b in Beacon.objects.all():
if b.serial == tmp_serial:
# do something
break
然后我做了先行一步:
b_queryset = Beacon.objects.all().filter(serial=tmp_serial)
if b_queryset.exists():
#do something
现在,是否有更多优化的第二步?
我不认为将我的QuerySet强制转换为List并执行list.index('tmp_serial')会更快。
谢谢,非常有帮助。你认为exists()是否超快?如果exists()返回True,那么首先执行exists()然后获取对象是否是个好主意? – bixente57
存在确实超快,但如果你需要这些对象,直接获取它们,不要使用存在。它会为您节省一个查询。 –