MongoDB: $ рдпрд╛ VS $ - рдХрд┐рд╕ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рддрд╛рд░реНрдХрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ $ рдпрд╛ $ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ MongoDB рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдмрд╣реБрдд рдХрдо рд╣реЛрдЧреАред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рдордп рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред



рдЯреЗрд╕реНрдЯ MongoDB 2.4.9 рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ MongoDB рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рд╕рд╛рд░ рдХреА рд╕рдордЭ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП - рдЗрд╕реЗ рдХреЗрд╡рд▓ рджреЛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реЛрдиреЗ рджреЗрдВред

$m = new MongoClient('mongodb://mongodb01,mongodb02,mongodba/?replicaSet=pkrs'); $mdb = $m->selectDB('test'); $collection = $mdb->selectCollection('test'); $collection->drop(); $collection->ensureIndex(array('i' => 1, 'j' => 1)); for ($i = 0; $i < 100; ++$i) { for ($j = 0; $j < 100; ++$j) { $collection->insert(array('i' => $i, 'j' => $j)); } }
      
      





рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреЗрд╡рд▓ 10K рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реЛрдВрдЧреЗред рд╣рд╛рдВ, рдпрд╣рд╛рдВ рдмреИрдЪрдЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдиреЛрдЯ рдХреЗ рдореБрдЦреНрдп рд╕рд╛рд░ рдХреА рд╕рдордЭ рдХреЛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред



рдЖрдкрдХреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ (рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХрдИ рдмрд╛рд░) 1000 рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдирдореВрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдЕрдирдмрд╛рдЙрдВрдб рдЬреЛрдбрд╝реЗ i рдФрд░ j рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред

рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдБрдХрд┐ рдореИрдВрдиреЗ рдПрдХ рдорд╣реАрдиреЗ рд╕реЗ рднреА рдХрдо рд╕рдордп рдкрд╣рд▓реЗ MongoDB рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛, рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдорди рдореЗрдВ рдЖрдИ рд╡рд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЕрдиреБрд░реЛрдз рдерд╛:

 $orArray = array(); for ($i = 0; $i < 10; ++$i) { for ($j = 0; $j < 100; ++$j) { $orArray[] = array('i' => $i, 'j' => $j); } } $query = array('$or' => $orArray);
      
      





рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдбреЗрдЯрд╛ рдХреНрд░рдо рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рддрд╛рдХрд┐ рд╡реНрдпрд╡рд╕рд╛рдп рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рд┐рд░ рдХреЛ рдЯрдХрд░рд╛рдирд╛ рди рд╣реЛред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛрдбрд╝реЗ i рдФрд░ j рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЬреБрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред

рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореЗрд░реА рдЖрдБрдЦреЗрдВ рдЕрдкреНрд░рд┐рдп рдЖрд╢реНрдЪрд░реНрдп рд╕реЗ рдЪреМрдбрд╝реА рд╣реЛ рдЧрдИрдВ - рдпрд╣ рдЕрдиреБрд░реЛрдз 2 рд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛! рдХреЛрдб рдореЗрдВ рдКрдкрд░ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдерд╛ред

рдореИрдВрдиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХрд┐ рдпрд╣ рдРрд╕рд╛ рдиреЗрдЯрд╡рд░реНрдХ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдзреАрдорд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдорд╛рдорд▓рд╛ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╣реИред

рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рд╡рд╣ рдпрд╣ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧрд╛:

 $query = array('i' => array('$lt' => 10), 'j' => array('$lt' => 100));
      
      





рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд╡реЗрд░реА рдкрд╣рд▓реЗ рд╣реА 0.01 рд╕реЗрдХрдВрдб рдореЗрдВ рдЪрд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реА рд╣реИред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдЖрдкрдХреЛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рд╡рд╣ рдорд┐рд▓ рдЧрдпрд╛ рдерд╛ред рдЕрдиреБрд░реЛрдз рдХреЗ рддрд░реНрдХ рд╕реЗ, $ рдХреЗ рдмрдЬрд╛рдп $ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдХрд┐ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЬреЛрдбрд╝реЗ рдкрд░ рддреБрд░рдВрдд $ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред рдЕрдЧрд░ рдРрд╕рд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред

рдЪреВрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рджреЛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ $ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рд╣рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдПрдХ рдХреГрддреНрд░рд┐рдо рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВрдЧреЗ (рдЕрдВрдбрд░рд╕реНрдХреЛрд░ '_' рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ i рдФрд░ j рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЕрдВрдзрд╛ рдХрд░рддреЗ рд╣реИрдВ):

 $collection->ensureIndex(array('ij' => 1)); for ($i = 0; $i < 100; ++$i) { for ($j = 0; $j < 100; ++$j) { $collection->insert(array('i' => $i, 'j' => $j, 'ij' => $i.'_'.$j)); } }
      
      





рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

 $inArray = array(); for ($i = 0; $i < 10; ++$i) { for ($j = 0; $j < 100; ++$j) { $inArray[] = $i.'_'.$j; } } $query = array('ij' => array('$in' => $inArray));
      
      





рдФрд░ "рдУрд╣ рдЪрдорддреНрдХрд╛рд░!" рд╣рдо рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рдХреЗрд╡рд▓ 0.01 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм "2 рд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ" рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖ)ред

рдереЛрдбрд╝реА рд╕реА рдЧреБрдЧрд▓реА рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рдЗрд╕ рдШрдЯрдирд╛ рдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдорд┐рд▓рд╛: рдЬрдм $ рдпрд╛ MongoDB рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдХреНрд╡реЗрд░реА рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ рдХрдерд┐рдд рддреМрд░ рдкрд░ рдХрдИ рдкреНрд░рд╢реНрди рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ "рдЬрдорд╛ рджреЗрддрд╛ рд╣реИ"ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрдерди рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рддрдХ рджреВрд╕рд░рд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред



PS рдирд┐рд╖реНрдХрд░реНрд╖: $ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рди рдХрд░реЗрдВ рдпрд╛

PPS рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рд╕рдордп рдХреИрд╕реЗ рдорд╛рдкрд╛ред рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреЙрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдЦреЛрдЬ () рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреЗрд╡рд▓ MongoCursor рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдкрд░ рд╣реА рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЪрдХреНрд░ рдХреЗ рдкрд╣рд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рд╕рдордп рдХрдЯрдСрдл рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

PPPS рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдШрд░ рдкрд░ рдбреНрд░рд╛рдЗрд╡рд┐рдВрдЧ рдЯреЗрд╕реНрдЯ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреА, рддреЛ рдпрд╣рд╛рдВ рдЬрд╛рдирд┐рдП рдкреВрд░рд╛ рд╕реНрд░реЛрдд:
 <?php $m = new MongoClient('mongodb://mongodb01,mongodb02,mongodba/?replicaSet=pkrs'); $mdb = $m->selectDB('test'); $collection = $mdb->selectCollection('test'); $collection->drop(); $collection->ensureIndex(array('i' => 1, 'j' => 1)); for ($i = 0; $i < 100; ++$i) { for ($j = 0; $j < 100; ++$j) { $collection->insert(array('i' => $i, 'j' => $j)); } } $orArray = array(); for ($i = 0; $i < 10; ++$i) { for ($j = 0; $j < 100; ++$j) { $orArray[] = array('i' => $i, 'j' => $j); } } $query = array('$or' => $orArray); testQuery('OR Query', $collection, $query); $query = array('i' => array('$lt' => 10), 'j' => array('$lt' => 100)); testQuery('Range Query', $collection, $query); $collection->drop(); $collection->ensureIndex(array('ij' => 1)); for ($i = 0; $i < 100; ++$i) { for ($j = 0; $j < 100; ++$j) { $collection->insert(array('i' => $i, 'j' => $j, 'ij' => $i.'_'.$j)); } } $inArray = array(); for ($i = 0; $i < 10; ++$i) { for ($j = 0; $j < 100; ++$j) { $inArray[] = $i.'_'.$j; } } $query = array('ij' => array('$in' => $inArray)); testQuery('IN Query', $collection, $query); function testQuery ($testName, $collection, $query) { $cursor = $collection->find($query); $cursor->batchSize(1000); $start = microtime(true); $first = true; foreach ($cursor as $doc) { if ($first) { $time1 = microtime(true); $first = false; } } $time2 = microtime(true); $resultFirst = $time1 - $start; $resultOther = $time2 - $time1; echo "{$testName} - First: {$resultFirst} Other: {$resultOther}<br />\n"; }
      
      







рдпреВрдкреАрдбреА 1 рдбрд┐рдо_рдПрд╕ рдХреЛ рдорд┐рд╢реНрд░рд┐рдд рдХреЗ рдмрдЬрд╛рдп рд╕рд▓рд╛рд╣ рджреА рдЧрдИ (рдФрд░ рдКрдкрд░ рджрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕реЗ рджреЛ рдЕрд▓рдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЧреНрд░) рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреНрд╡реЗрд░реА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЧрддрд┐ рд▓рдЧрднрдЧ 10 рдЧреБрдирд╛ (0.2 рд╕реЗрдХрдВрдб рддрдХ) рддреЗрдЬ рд╣реЛ рдЧрдИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА $ рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╣рд╛рд░ рдЬрд╛рддрд╛ рд╣реИ



рдлреИрд▓рд╛рдУ рдЬреЛ рд╕рдордЭрд╛рддрд╛ рд╣реИ:

рд╕рдордЭрд╛рдУ ($ рдпрд╛ рд╕рдордЧреНрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдкрд░)
 /* 0 */ { "clauses" : [ { "cursor" : "BtreeCursor i_1_j_1", "isMultiKey" : false, "n" : 1, "nscannedObjects" : 1, "nscanned" : 1, "nscannedObjectsAllPlans" : 1, "nscannedAllPlans" : 1, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, "indexBounds" : { "i" : [ [ 1, 1 ] ], "j" : [ [ 1, 1 ] ] } }, { "cursor" : "BtreeCursor i_1_j_1", "isMultiKey" : false, "n" : 1, "nscannedObjects" : 1, "nscanned" : 1, "nscannedObjectsAllPlans" : 1, "nscannedAllPlans" : 1, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, "indexBounds" : { "i" : [ [ 2, 2 ] ], "j" : [ [ 2, 2 ] ] } } ], "n" : 2, "nscannedObjects" : 2, "nscanned" : 2, "nscannedObjectsAllPlans" : 2, "nscannedAllPlans" : 2, "millis" : 0, "server" : "mongodb01:27017" }
      
      







рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ ($ рдФрд░ i рдФрд░ j рдХреЗ рд▓рд┐рдП рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд╛рде)
 /* 0 */ { "clauses" : [ { "cursor" : "BtreeCursor i_1", "isMultiKey" : false, "n" : 1, "nscannedObjects" : 100, "nscanned" : 100, "nscannedObjectsAllPlans" : 300, "nscannedAllPlans" : 300, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 1, "indexBounds" : { "i" : [ [ 1, 1 ] ] } }, { "cursor" : "BtreeCursor i_1", "isMultiKey" : false, "n" : 1, "nscannedObjects" : 100, "nscanned" : 100, "nscannedObjectsAllPlans" : 300, "nscannedAllPlans" : 300, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 1, "indexBounds" : { "i" : [ [ 2, 2 ] ] } } ], "n" : 2, "nscannedObjects" : 200, "nscanned" : 200, "nscannedObjectsAllPlans" : 600, "nscannedAllPlans" : 600, "millis" : 2, "server" : "mongodb01:27017" }
      
      







рд╕рдордЭрд╛рдУ (рдХреГрддреНрд░рд┐рдо рд░реВрдк рд╕реЗ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд╛рде $)
 /* 0 */ { "cursor" : "BtreeCursor ij_1 multi", "isMultiKey" : false, "n" : 2, "nscannedObjects" : 2, "nscanned" : 3, "nscannedObjectsAllPlans" : 2, "nscannedAllPlans" : 3, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, "indexBounds" : { "ij" : [ [ "1_1", "1_1" ], [ "2_2", "2_2" ] ] }, "server" : "mongodb01:27017" }
      
      







UPD 2 рдореИрдВрдиреЗ MongoDB 2.6 рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдпрд╛

рджрд░рдЕрд╕рд▓, рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг (рджреЛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЧреНрд░ рд╕реВрдЪрдХрд╛рдВрдХ) рд╡рд╣рд╛рдБ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдЕрд░реНрдерд╛рддреН, 0.07 рд╕реЗрдХрдВрдб рдореЗрдВред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, i_j рдлреЙрд░реНрдо рдХреЗ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рдЕрднреА рднреА 0.006 - 0.01 рд╕реЗрдХрдВрдб (рдпрд╛рдиреА, рд▓рдЧрднрдЧ 10 рдЧреБрдирд╛ рддреЗрдЬ) рдореЗрдВ рд╣реИред



All Articles