我有以下查询:MyModel.objects.filter(id__in=ids)
。
我注意到表中列数的增加会降低上述查询的速度。
为什么?
答案 0 :(得分:2)
Postgres中的查询时间主要包括计划时间,执行时间和数据提取。
计划时间和执行时间不应受表中许多列的影响,但数据获取阶段肯定是在返回更多数据时。
另外,发生的另一个步骤是将返回数据映射到Django QuerySet,如果涉及更多列,则需要更多时间。
要限制返回的数据范围(如果适用),您始终可以使用values,defer或only。
在一些复杂的数据建模情况下,您的模型可能包含许多字段,其中一些字段可能包含大量数据(例如,文本字段),或者需要昂贵的处理才能将它们转换为Python对象。如果您在最初获取数据时不知道是否需要这些特定字段的情况下使用查询集的结果,则可以告诉Django不要从数据库中检索它们。