关于mysql:database`order by`添加更多条目时的速度

Database `ORDER BY` speeds as more entries are added

我对数据库不是很了解。我想检索"最新"的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还允许原始数据库查询。


好吧,如果您使用的是django,那么您不必担心db的复杂性。ORM来解决你的担忧。

简单的事实是,Django使用了惰性查询。因此,它将减少您的数据库命中并提高系统性能。

因此,根据问题的初始部分,您可以简单地运行此查询:

1
queryset = YourModel.objects.filter(**lookup_condition).order_by('id')

它将从该模型类的数据库中获取与条件匹配的对象的查询集。有关详细信息,请查看:https://docs.djangoproject.com/en/1.9/ref/models/queryset/django.db.models.query.queryset.filter

要在上面打架,就要这样跑:

1
2
3
 first_ten_values = queryset[0:9]
 second_ten_values = queryset[10:19]
 ...