Mongo索引不会使查询更快

时间:2011-11-09 18:38:07

标签: mongodb indexing database-design database

解决。只需更改db.test.ensureIndex(['name'])=>到db.test.ensureIndex({'name':1});


我今天正在测试MongoDB。我有10万份文件的测试集。每个文档都有这样的结构{_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([ '名称']);

     

db.test.getIndexes();   [           {                   “v”:1,                   “关键”:{                           “_id”:1                   },                   “ns”:“test.test”,                   “name”:“ id ”           },           {                   “v”:1,                   “关键”:[                           “名称”                   ]                   “ns”:“test.test”,                   “名字”:“0_”           }   ]

重复测试。并再次获得21个seonds。为什么mongo在我的情况下不使用索引?

1 个答案:

答案 0 :(得分:1)

您应该使用explain方法查看执行计划并找出它是否正确使用索引。

http://www.mongodb.org/display/DOCS/Explain

我还认为您要将索引创建命令更新为:

db.things.ensureIndex({“name”:1})

它不是一个数组,而是一个键值对,其中键是要索引的属性,值为1或-1,具体取决于您是希望将其索引为升序还是降序。

检查索引的文档: http://www.mongodb.org/display/DOCS/Indexes#Indexes-CreationOptions