为什么这个mongo索引不起作用?

时间:2011-10-20 16:44:31

标签: ruby-on-rails ruby mongodb

我在这里添加索引:

db.products.ensureIndex({current_features:1})

但是它似乎没有任何影响:

db.products.find({"current_features" : {"$exists" : true}}).explain()
{
    "cursor" : "BasicCursor",
    "nscanned" : 20995,
    "nscannedObjects" : 20995,
    "n" : 2,
    "millis" : 94,
    "nYields" : 0,
    "nChunkSkips" : 0,
    "isMultiKey" : false,
    "indexOnly" : false,
    "indexBounds" : {

    }
}

1 个答案:

答案 0 :(得分:2)

你要求每个具有指定字段的元组,mongo使用自2.0版以来的索引,来自doc:

  

在v2.0之前,$ exists无法使用索引。其他索引   字段仍然使用。

您应该使用sparse index代替。稀疏索引基本上只索引具有索引字段的文档。因此,您的查询将被预先计算,以确保最大速度。