1

ユーザーに提案する場所の名前を抽出しようとしていた場所のコレクションがありますが、時間がかかります。最適化する方法があるかどうか知りたいです。私はmongoengine ORMを使用しており、データベースはmongodbです。

クエリ:

results = Place.objects(name__istartswith=query).only('name')

クエリにかかる時間はマイクロ秒単位で非常に短くなります。

しかし今、結果から名前にアクセスしようとすると

names = [result.name for result in results]

この行は、約 2500 の長さのリストの場合、3 ~ 5 秒の範囲で非常に長い時間がかかります。

を使用してみscalarましたが、別のリストでユニオンを実行すると時間が長くなります。

名前リストにアクセスするより良い方法はありますか。

4

1 に答える 1

0

クエリセットは、反復されるまで実行されないためresults = Place.objects(name=query).only('name')、まだ呼び出されていないクエリセットを返します。反復すると、クエリが実行され、データがネットワーク経由で送信されます。

pymongo 経由で実行するとクエリが遅くなりますか? MongoEngine オブジェクトがas_pymongoを使用しようとするため、それらは必要ないため、生の辞書を返します。

その他のヒントは、インデックスを使用してクエリのパフォーマンスを確認することです。プロファイラーのドキュメントを参照してください。

于 2013-10-01T08:28:28.450 に答える