2011-07-08 30 views
1
MyModel.objects.all().order_by('-timestamp') 

有時間戳唯一鍵和另一列:這個order_by django查詢的性能命中是什麼?

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

所有我想要的是獲得該表中的最新行。 查詢達到了,但我正在考慮將來它會增長到100K行。 這個查詢&模式有沒有明顯的性能問題?

+1

那裏的任何數據庫書籍都沒有告訴任何人如何描述他們的查詢? –

+0

不應該是使用django的ORM生成100K行的重大事件,並且瞭解應用程序如何執行...並順便說一句。 100.000行對我來說似乎並不那麼... –

回答

0

沒有看到您的完整查詢和您的模式,不可能做超過推測。

但是......我相信MySQL中多列索引中列的順序很重要。這意味着您的(代碼,時間戳)索引可能無法用於按時間戳排序。如果您將訂單更改爲(時間戳,代碼),則可能對ORDER BY時間戳可用,但可能會影響其他查詢的性能。

如果您的使用情況需要兩者的索引,則可能需要在時間戳列上創建第二個索引。

0

由於您的查詢位於代碼和時間戳上,因此如果WHERE子句中沒有代碼(並且您會在explain的結果中看到filesort),則不能使用索引。如果存在code=條件,則查詢將會足夠快。但是,如果您有100000條與查詢部分相匹配的記錄,並且您想按時間戳排序,那麼如果您限制時間戳爲最後幾天(您必須根據您的應用程序選擇限制),則速度將非常快。