2017-10-10 26 views
-1

让我们说我有一个名为Best它有一个更好的性能过滤器/所有在Django查询集?

我想知道的模型,如果使用Best.objects.all()会是一个更好的选择,或者Best.objects.filter(this=that)会更好,整体性能,如果我不需要查询一切

+1

他们是完全不同的东西,但正如你所问......如果你有一个100万行的表。调用'.all()'需要返回100万行。如果仅为这些行中的一行记录“this ==”,那么最好调用'.filter(this = that)',这样你只需从数据库中取出一行即可。 –

+0

@markwalker_不会调用'Best.objects.filter(this = that)'仍然会用上百万行来确保所有的this = that都被搜索,除非我使用'Best.objects.filter那么它会查询第一个并停止 – Tsuna

+0

它仍然会经过一百万行,但是动作会发生在数据库中,而不是将数据传输到python,因此效率更高。 –

回答

1

使用Best.objects.all()然后用Python测试if this == that不是一个好主意。当数据库执行检查时,Best.objects.filter(this = that)的性能更好。只有满足检查的对象才能在Python中使用。

让我们用另一个例子:amount = len(Best.objects.all())会比amount = Best.objects.all().count()慢很多,因为Python不需要解决它。

+0

非常感谢,我不知道之前有这样的区别。特别是'len'和'count()'我会记住使用'count()',但这就是说,为什么人们仍然会使用'len'? – Tsuna

+0

有些人不知道'count'更有效率,我猜别人不知道它存在。 – montudor