1

MongoDB に送られる Python (3.2) リクエストがあり、リクエスト自体は十分に高速に実行されています。その後、if ステートメント チェックを実行して、レコードが見つかったかどうかを確認すると、50 倍の時間がかかります。

    Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
    58         27623      6475988    234.4      1.7          itemInDB = db.mainData.find({"x":item[x]}).limit(1)
    59                                           
    60                                                       #existing item in db
    61         27623    293419802  10622.3     77.6          if itemInDB.count():

if 文がこんなに長くかかる原因は一体何なのか!? レコードが見つかったかどうかを確認するためのより良い方法があるに違いないと思いますが、Google は空になっています。

助けてくれてありがとう。

4

2 に答える 2

2

おそらくより良い方法

1 つの値のみを返すことに関心がある場合は、find_one代わりにfind. findコレクションを実行する必要がある とは対照的に、値が見つかった後に値の検索を停止します。

itemInDB = db.mainData.find_one({"x":item[x]})
if itemInDB:
  print("Item found")
else:
  print("Item not found")

あなたの例のために

PyMongo docsによると、カーソルのカウントを照会する場合、パラメーター (Trueまたは) を渡して、カーソルに対して以前に行われたまたは呼び出しFalseを考慮することができます。そのパラメーターのデフォルトは(つまり、これらの呼び出しを考慮しない) です。これは、クエリのパフォーマンスに影響を与える可能性があります。skiplimitFalsecount

クエリ パフォーマンスの測定

クエリがmongoによってどのように実行されるかを確認したい場合はexplain、カーソルを呼び出すことができます:

db.coll.find({"x":4}).explain()

Explain 関数はPyMongo にも実装されています

于 2013-11-08T06:10:27.703 に答える