这个 order_by 的 Django 查询性能损失有多大?
MyModel.objects.all().order_by('-timestamp')
这里有一个唯一的键,它是由时间戳和另一列组成的:
`code` varchar(3) NOT NULL,
`timestamp` date NOT NULL,
UNIQUE KEY `exchangerate_currency_70883b95_uniq` (`code`,`timestamp`)
我想要的只是获取表格中最新的一行数据。这个查询可以做到,但我在考虑将来当数据增长到10万行时,会不会有明显的性能问题?
2 个回答
0
因为你的问题涉及到代码和时间戳,如果在查询的条件中没有代码,索引就无法使用(你会在explain
的结果中看到filesort
)。如果有code=
的条件,查询会比较快。不过,如果你有超过10万个记录符合查询条件,而你又想按照时间戳排序,如果你把时间戳限制在比如说最近几天,这样查询会非常快(你需要根据你的应用来选择这个限制)。
0
在没有看到你完整的查询和数据库结构的情况下,我只能猜测一些情况。
不过,我认为在MySQL中,多列索引的列顺序是很重要的。这意味着你在(code,timestamp)上的索引可能不适合用来按时间戳排序。如果你把顺序改成(timestamp,code),那么这个索引就可能适合用来按时间戳排序,但这可能会影响其他查询的性能。
如果你的使用场景需要同时对这两个字段建立索引,你可能需要单独为时间戳列创建一个第二个索引。