さまざまなdjangoクエリセットを介してdbからデータを取得するために複数の方法を使用していますが、各クエリセットのランタイムと、可能であればより良い方法を知りたいです(一定時間でデータを取得するために!!)
qs = MyModel.objects.order_by('-time')
qs = qs.filter(blah = blah)
最初のエントリを取得するには、次のようにしています。
entry = list(qs[:1])
first_entry = entry[0]
または、10 番目の最後のエントリを取得するには:
entry = list(qs)
some_entry = entry[9]
last_entry = entry[-1]
しかし、これには O(n) 時間がかかると思いますが、定数時間で n 番目の項を取得する方法はありますか? エントリのIDまたはその他の値(ソート済み)がわからないため、get()を使用したくありませんが、位置のみです。
注釈を使用することもできますが、これには O(n) ランタイムもかかります。
MyModel.objects.values('date').annotate(min_value=Min('value')).order_by('min_value')[0]
一定の時間内にそのエントリが必要な位置を知っていますか?