如何强制mongodb使用BasicCursor而不是索引
问题描述:
我有一个带有'name'索引的集合。如何强制mongodb使用BasicCursor而不是索引
> db.search.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"name" : 1
},
"name" : "name_1"
}
]
>
我的一个疑问是
> db.collection.find({name: {$regex: '^string'}}).explain()
,并使用该索引
{
"cursor" : "BtreeCursor name_1 multi",
"isMultiKey" : false,
"n" : 25,
"nscannedObjects" : 25,
"nscanned" : 3247,
"nscannedObjectsAllPlans" : 25,
"nscannedAllPlans" : 3247,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 366,
"indexBounds" : {
"name" : [
[
"",
{
}
],
[
/string/,
/string/
]
]
},
"server" : "..."
}
我已经知道从MongoDB regular expression with indexed field,使用BasiCursor会更快。
> db.search.find({name: {$regex: 'string'}}).explain()
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 27,
"nscannedObjects" : 3385,
"nscanned" : 3385,
"nscannedObjectsAllPlans" : 3385,
"nscannedAllPlans" : 3385,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 20,
"indexBounds" : {
},
}
如何告诉Mongodb在不删除索引的情况下使用BasicCursor?
答
您可以强制查询优化器无法通过hint
与$natural
使用任何索引:
> db.collection.find({name: {$regex: '^string'}}).hint({ $natural: 1})
+0
谢谢!这就像一个魅力。 – 2013-04-30 22:54:37
的[$提示操作(http://docs.mongodb.org/manual/reference/operator/hint /)可以用来强制使用特定的索引。也许它也可以通过传递一个空对象来强制索引被忽略? – Philipp 2013-04-30 21:43:09