我对数据库不是很了解。我想检索,比如拥有者 ID 匹配某物的“最新”10 行,然后可能分页以检索具有该所有者的下一个“最新”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 也允许原始数据库查询。
最佳答案
好吧,如果你用的是django,那你就不用担心DB的复杂性了。 ORM 来解决您的后顾之忧。
简单的事实,Django 使用lazy query .因此,它将减少您的数据库命中并提高系统性能。
因此,根据您最初的问题部分,您可以简单地运行此查询:
queryset = YourModel.objects.filter(**lookup_condition).order_by('id')
它将从该模型类的数据库中获取一个包含与条件匹配的对象的查询集。有关详细信息,请查看: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]
...
关于mysql - 随着添加更多条目,数据库 `ORDER BY` 速度加快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34736923/