Монго индекс не делает запрос быстрее - PullRequest
0 голосов
/ 09 ноября 2011

решаемая. Просто измените db.test.ensureIndex (['name']) => на db.test.ensureIndex ({'name': 1});


Я сегодня тестировал 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 ([ 'имя']);

db.test.getIndexes (); [ { "v": 1, "ключ": { "_id": 1 }, "ns": "test.test", "name": " id " }, { "v": 1, "ключ": [ "название" ], "ns": "test.test", "имя": "0_" } ]

И повторить тест. И снова получил 21 секунду. Почему монго не использует индекс в моем случае?

1 Ответ

1 голос
/ 09 ноября 2011

Вы должны использовать метод explain, чтобы просмотреть план выполнения и выяснить, правильно ли он использует индекс.

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

Я также думаю, что вы хотите обновить команду создания индекса следующим образом:

db.things.ensureIndex ({"name": 1})

Это не массив, а пара ключ-значение, где ключ - это свойство, которое вы хотите проиндексировать, и значение 1 или -1, в зависимости от того, хотите ли вы индексировать его по возрастанию или по убыванию.

Проверьте документы на предмет индексов: http://www.mongodb.org/display/DOCS/Indexes#Indexes-CreationOptions

...