2014-05-08 1 views
0

J'ai besoin de trouver l'élément le plus récent, le champ "data_caricamento" enregistrer la date. donc je fait un index avec coquille MognoDb:php mongodb optimisation requête de tri

db.collection.ensureIndex({"data_caricamento": -1}) 

et avec le code php ci-dessous j'ai ce que je dois

$cursor=$collection->find(); 
    $cursor->sort(array("data_caricamento"=> -1)); 
    $cursor->limit($n); 

mais je pense que cela devrait être une meilleure façon de le faire, pour Par exemple, il existe un moyen d'interroger directement l'index? thx.

Répondre

1

il existe un moyen d'interroger directement l'index?

Trier par. Vous pouvez faire une requête couverte ici en faisant:

$cursor = $collection 
    ->find(array(), array('_id' => 0, 'data_caricamento' => 1)) 
    ->sort(array("data_caricamento" => -1)) 
    ->limit($n); 

Cela interrogera uniquement l'index.

+0

mais de toujours trier même si l'index est encore trié. donc la complexité n'a pas changé – user3535936

+1

@ user3535936 wehat voulez-vous dire? L'index est déjà trié, votre lecture juste de l'endroit dans l'index – Sammaye

+0

mais sur votre code a encore 3 commande sur le tuyau find-> sort-> limite alors je me demande si cela va améliorer les performances – user3535936

0

Essayez d'utiliser l'indice. Et si vous voulez vérifier si les index ont été utilisés par votre requête, utilisez explain().

.... 
$collection->find()->sort(array('data_caricamento'=>1))->hint(array('data_caricamento'=>1)); 
print_r($cursor->explain()); 

Cela vous aidera à voir que vos requêtes arrivent sur l'index pour la recherche et le tri plus rapide! À la votre!