这个order_by django查询的性能影响是多少?

时间:2011-07-08 08:56:13

标签: python mysql django

MyModel.objects.all().order_by('-timestamp')

时间戳和另一列有一个唯一的键:

`code` varchar(3) NOT NULL,
`timestamp` date NOT NULL,
 UNIQUE KEY `exchangerate_currency_70883b95_uniq` (`code`,`timestamp`)

我想要的只是获取表格中的最新一行。 查询实现了这一点,但我想到了它将增长到100K行的未来。 这个查询&有明显的性能问题吗?架构?

2 个答案:

答案 0 :(得分:0)

如果没有看到完整的查询和您的架构,就不可能做出更多的推测。

但是......我相信MySQL中多列索引中列的顺序很重要。这意味着您的(代码,时间戳)索引可能无法按时间戳排序。如果您将订单更改为(时间戳,代码),则它可能对ORDER BY时间戳有用,但是它可能会损害其他查询的性能。

如果您的使用需要两者的索引,则可能需要仅在timestamp列上创建第二个索引。

答案 1 :(得分:0)

由于您的查询是在代码和时间戳上,因此如果WHERE子句中没有代码,则无法使用索引(您将在filesort的结果中看到explain)。如果存在code=条件,则查询将足够快。但是,如果您有100000条与查询部分匹配的记录,并且您希望按时间戳排序,那么如果您将时间戳限制为让我们说最近几天(您必须根据您的应用程序选择限制),那么它将非常快。