Mongo索引不会使查询更快
问题描述:
已解决。只需将db.test.ensureIndex(['name'])=>更改为db.test.ensureIndex({'name':1});Mongo索引不会使查询更快
我今天正在测试MongoDB。我有100 000个文件的测试收集。每个文档都有这样的结构{_id:123123,名称:“foo123123”}用PHP编写的
set_time_limit(0);
ini_set('display_errors', 1);
$mongo = new Mongo("mongodb://127.0.0.1:27017");
$db = $mongo->test;
$collection = $db->test;
$start = microtime(true);
for($i=0; $i<10000; $i++){
$obj = $collection->findOne(array('name'=>'foo'.$i));
}
$end = microtime(true);
var_dump($end-$start);
首先测试不上名字字段索引
测试代码是21秒 比我添加索引
db.test.ensureIndex(['name']);
db.test.getIndexes(); [ { “V”:1, “键”:{ “_id”:1 }, “NS”: “test.test”, “名称”: “ID” } { “v”:1, “键”:[ “姓名” ], “NS”: “test.test”, “名称”: “0_” } ]
并重复测试。又获得了21个seonds。为什么mongo在我的情况下不使用索引?
答
您应该使用explain
方法来查看执行计划并找出它是否正确使用索引。
http://www.mongodb.org/display/DOCS/Explain
我也认为你需要更新索引创建命令是:
db.things.ensureIndex({ “名”:1})
这是不一个数组,而是一个键 - 值对,其中键是您要索引的属性,值取值为1或-1,具体取决于您希望索引是升序还是降序。
检查文档指数: http://www.mongodb.org/display/DOCS/Indexes#Indexes-CreationOptions
对于我的查询是 { “光标”: “BasicCursor”, “nscanned”:100000, “nscannedObjects”:100000, “N” :1, “米利斯”:68, “nYields”:0, “nChunkSkips”:0, “isMultiKey”:假, “indexOnly”:假, “indexBounds”:{ } } – zim32
所以,如果它没有使用索引是正确的 - 如果是,它会说光标是B-Tree索引而不是基本光标。 –
我已经更新了我的答案,提供了有关索引的更多信息 - 请看看 –