mysql - 随着添加更多条目,数据库 `ORDER BY` 速度加快

标签 mysql django database

我对数据库不是很了解。我想检索,比如拥有者 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/

相关文章:

php - 使用 MySQL 计算连续天数

sql - 如何在 PostgreSQL 中实现多对多关系?

MySQL:数字格式

php - 全文搜索,没有结果?

MySQL 存储过程

python - 在 Apache/mod_wsgi 上运行 Django 时出错

php - 数据库 : Save users and admins in the same table (pros/cons)?

php - 单个 mysqli_result 中的多个查询

python - 更新记录时发生 Django IntegrityError

python - 如何使用 Django 将每个图像嵌入 HTML 页面的目录中?