MyModel.objects.all().order_by('-timestamp')
时间戳和另一列有一个唯一的键:
`code` varchar(3) NOT NULL,
`timestamp` date NOT NULL,
UNIQUE KEY `exchangerate_currency_70883b95_uniq` (`code`,`timestamp`)
我想要的只是获取表格中的最新一行。 查询实现了这一点,但我想到了它将增长到100K行的未来。 这个查询&有明显的性能问题吗?架构?
答案 0 :(得分:0)
如果没有看到完整的查询和您的架构,就不可能做出更多的推测。
但是......我相信MySQL中多列索引中列的顺序很重要。这意味着您的(代码,时间戳)索引可能无法按时间戳排序。如果您将订单更改为(时间戳,代码),则它可能对ORDER BY时间戳有用,但是它可能会损害其他查询的性能。
如果您的使用需要两者的索引,则可能需要仅在timestamp列上创建第二个索引。
答案 1 :(得分:0)
由于您的查询是在代码和时间戳上,因此如果WHERE子句中没有代码,则无法使用索引(您将在filesort
的结果中看到explain
)。如果存在code=
条件,则查询将足够快。但是,如果您有100000条与查询部分匹配的记录,并且您希望按时间戳排序,那么如果您将时间戳限制为让我们说最近几天(您必须根据您的应用程序选择限制),那么它将非常快。