在我的项目中,我面临一些情况,我需要在同一视图中多次在同一模型上查询。 (在这种情况下django模型,因为我正在使用django和postgresql)。
第一种方法可能是在同一型号上多次过滤。
另一种方法可能是我在模型上查询并获取所有数据,然后将其保存到局部变量中。然后我可以多次对该变量进行过滤。
哪种方法最有效我的意思是更快,我应该采用哪种方法。
假设我有一个名为人的模型,我可以采取以下两种方法:
(1)
active_peoples = People.objects.filter(active=True)
lazy_peoples = People.objects.filter(lazy=True)
inactive_peoples = People.objects.filter(active=False)
good_peoples = People.objects.filter(good=True)
bad_peoples = People.objects.filter(good=False)
(2)
peoples = People.objects.all()
lazy_peoples = peoples.filter(lazy=True)
inactive_peoples = peoples.filter(active=False)
good_peoples = peoples.filter(good=True)
bad_peoples = peoples.filter(good=False)
哪种方法更快?
答案 0 :(得分:0)
我认为'完全取决于数据集和编码,请参阅Django提供的最佳过滤方法,可以有效地过滤您的数据,减少时间限制。
第一个测试用例: -
假设您拥有较小的数据集,那么可能会多次访问数据库并且获取数据可能比获取数据花费更多时间,存储在一个变量中并迭代它。在这种情况下,最好将数据存储在一个变量中。
第二个测试用例: -
假设您有大型数据集,如果您使用djago过滤器获取数据,每次可能花费的时间少于获取一次,存储在变量中以及存储在变量中,并使用较少复杂度的算法进行迭代。