5

次のクエリを実行していますが、結果が返されるまでに平均9秒かかります。フィルタがないので、インデックスが役立つかどうかはわかりません。なぜこれがとても遅いのですか?そこには250個のオブジェクトしかなく、4つのフィールド(すべてテキスト)しかありません。

Country.collection.find({},:fields => ['country_name', 'country_code']).to_json

"cursor":"BasicCursor",
"nscanned":247,
"nscannedObjects":247,
"n":247,
"millis":0,
"nYields":0,
"nChunkSkips":0,
"isMultiKey":false,
"indexOnly":false,
"indexBounds":{},
"allPlans":[{"cursor":"BasicCursor","indexBounds":{}}]

マシン上のCPU、メモリ、およびディスクは、クエリの実行にさえ気づきません。どんな助けでもいただければ幸いです。

4

1 に答える 1

3

を使用して'country_name'フィールドにインデックスを作成します。

db.countries.ensureIndex({country_name:1});

これにより、クエリが大幅に高速化されます。インデックスについて詳しくは、こちらをご覧ください。

PS-「hasmore」というフレーズが表示されたときに「it」と入力してさらに表示するか、次を使用して「hasmore」なしですべての結果を表示できます。

db.countries.find({}, {'country_name' : 1, 'country_code' : 1}).forEach(printjson)

また、次を使用してプロファイラーをいつでも設定できます。

>use databaseName;
> db.setProfilingLevel(2); // 2 tell the profiler to catch everything happened inside the DB

プロファイラーについて詳しくは、こちらをご覧ください

を使用してプロファイラー内のデータを表示できます

> db.system.profile.find()

このメソッドは、データベースと内部で何が起こっているかについてのより多くの情報を提供します。

于 2012-09-15T05:56:06.817 に答える