3

私が求めているのは、データベースから最新のトップ 10 ニュースを抽出する必要があるかどうかです。唯一の方法を見つけた

 News.objects.all().order_by('-pub_date')[:10]

しかし、それは安全ですか?この構造はどのように機能しますか?データベースからすべてのニュース レコードを取得し、それらを並べ替えて、10 個だけ取得しますか? または、クエリを最適化し、データベースから最新の 10 レコードのみを取得しますか? データベースには 1000 を超えるニュース レコードがあり、データベースからそれらを取得するには長い時間がかかり、それらを並べ替えるにはさらに時間がかかるため、これは重要です。

4

1 に答える 1

3

これは、QuerySets が lazyと同じくらい安全です。データベースクエリはデータベースから 10 個のレコードのみを返すように最適化されるため、このケースでは最大 10 個のオブジェクトがフェッチされます。

QuerySet が評価されるタイミングとQuerySet の制限について詳しく読むことができます(このセクションでは、実行している QuerySet のスライスについて説明します)。

于 2012-09-07T11:25:04.873 に答える