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-您可以在看到“有更多”短语时键入“它”以显示更多信息,或者您可以使用以下命令显示没有“有更多”的所有结果:

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 回答