2012-03-23 6 views
2

J'ai une collection avec 1,5 million de documents. Je compte en utilisant PHP:MongoDB compte très lent

$db->some->ensureIndex(array("sometext" => 1)); 
$db->some->ensureIndex(array("datsbla" => 1)); 
$arr["sometext"] = $string; 
$arr["datsbla"] = array('$gte' => $some, '$lte' => $thing); 
$count = $db->some->count($arr); 

J'ai allumé le profileur et chaque compte est comme 4500 ms. J'ai 20 compteurs comme ça dans ma page, donc ça rend ma page web TRÈS TRÈS LENTE.

Que dois-je faire pour le rendre plus rapide (< 100 ms)? Est-il même possible d'utiliser MongoDB?

Merci.

Répondre

2

Vous avez deux index individuels distincts - une requête ne peut utiliser qu'un seul index à la fois, vous ne profitez donc pas pleinement de l'indexation. Essayez un index composé sur les deux champs et vous devriez voir une amélioration significative.

+1

C'est le problème le plus important. Vous aurez besoin d'un index {sometext: 1, datsbla: 1} pour rendre ceci rapide. Si vous ne pouvez pas vraiment faire un index sur le champ de cardinalité la plus élevée, mais pas les deux. +1 –