我debugsqlshell
从 django 工具栏中找到,您可以使用 manage.py 运行它作为标准 shell 的替代品,我想测试嵌套对象的查询性能。
我在每个查询中都看到了某些输出,但是我怎样才能获得所有查询所经过的时间总和?
下面两种方法,哪个时候我想比较一下。
def stands(self):
stands = []
for stand in Stand.objects.all():
if stand.room.floor.building.fair.pk == self.pk:
stands.append(stand)
return stands
第二次使用prefetch_related
:
def stands3(self):
stands = []
for stand in Stand.objects.all().prefetch_related('room__floor__building__fair'):
if stand.room.floor.building.fair.pk == self.pk:
stands.append(stand)
return stands
感谢 joel-goldstick 的提议,cProfile
我设法得到了一些确切的数字:
站立():
11 685 649 function calls (10 532 897 primitive calls) in 9.861 seconds
stand3() 使用prefetch_related
:
1 855 483 function calls (1 839 617 primitive calls) in 1.295 seconds
但是仍然从 debugshell 获得这些数字会很酷,所以如果你知道如何去做,就不要费心回答。