我对数据库知之甚少。我想要检索,说"最新" 10行与所有者ID匹配的东西,然后可能分页以检索下一个"最新"拥有该所有者的10行,依此类推。但是说我在数据库表中添加了越来越多的行 - 在某些时候,这样的查询会变得难以忍受地慢,或者数据库通常是否足够好以至于不会令人担心?
我想这会是一个问题,因为要获得最新的"您必须按日期排序10行,即O(n log n)
。有了这个假设,我从SQL Server SELECT LAST N Rows寻求了一个可能的解决方案。
它向我指出http://www.sqlservercurry.com/2009/02/retrieve-last-n-rows-based-on-condition.html我发现查询有PARTITION BY
选项。我想这意味着首先选择与所有者ID匹配的所有行,然后对它们进行排序,这将显着更快,并且足够快,不用担心大多数应用程序。这是正确的理解吗?
否则,是否有更好的方法来获得最新的" N行(似乎暗示它是?)
如果有人知道一种方便的方法,我会在Django中开发应用程序,否则Django也允许原始数据库查询。
答案 0 :(得分:1)
好的,如果您使用的是django,那么您不必担心DB的复杂性。 ORM在这里解决您的后顾之忧。
简单的事实,Django使用lazy query。因此,它会降低数据库命中率并提高系统性能。
因此,根据您的问题的初始部分,您可以简单地运行此查询:
queryset = YourModel.objects.filter(**lookup_condition).order_by('id')
它将获得一个查询集,其中的对象与该Model类的数据库中的条件匹配。有关详情,请查看:https://docs.djangoproject.com/en/1.9/ref/models/querysets/#django.db.models.query.QuerySet.filter
要对其进行分页,请按以下方式运行:
first_ten_values = queryset[0:9]
second_ten_values = queryset[10:19]
...