2011-07-08 6 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の行を生成し、アプリケーションがどのように実行するかを見ても大したことはありません...そしてbtw。 100.000行はあまりにも私には見えません... –

答えて

0

あなたの完全なクエリとスキーマを見ることなく、推測以上のことはできません。

しかし、私は、MySQLの複数列インデックスの列の順序が重要だと考えています。これは、(コード、タイムスタンプ)上のあなたのインデックスが、タイムスタンプで注文するために使用できない可能性が高いことを意味します。代わりに注文を(タイムスタンプ、コード)に変更した場合は、おそらくORDER BYタイムスタンプで使用できますが、他のクエリではパフォーマンスが低下する可能性があります。

両方のインデックスにインデックスが必要な場合は、タイムスタンプ列だけに2番目のインデックスを作成する必要があります。

0

クエリはコードとタイムスタンプに基づいているため、WHERE句にコードがない場合はインデックスを使用できません(explainの結果にfilesortが表示されます)。 code=の条件がある場合、クエリは十分に速くなります。ただし、クエリ部分と一致する100000件以上のレコードがあり、タイムスタンプで注文したい場合は、タイムスタンプを制限して最後の数日間(アプリケーションに基づいて制限を選択する必要があります)を制限すると非常に高速になります。

関連する問題