J'ai une requête OR que j'utilise actuellement pour une mise à jour semi-large. Essentiellement ma collection est divisée en deux ensembles de données;MongoDB OR indexation de condition
1 référentiel principal et 1 sous-ensemble du référentiel principal. Ceci est juste pour permettre une recherche plus rapide sur un petit sous-ensemble de données.
Je trouve cependant que ma requête que je crée pour extraire des choses dans le sous-ensemble arrive à expiration ... et quand on regarde l'explication, il semble que deux requêtes se produisent réellement.
PRIMARY> var date = new Date(2012,05,01);
PRIMARY> db.col.find(
{"$or":[
{"date":{"$gt":date}},
{"keywords":{"$in":["Help","Support"]}}
]}).explain();
Ce produit:
{
"clauses" : [
{
"cursor" : "BtreeCursor ldate_-1",
"nscanned" : 1493872,
"nscannedObjects" : 1493872,
"n" : 1493872,
"millis" : 1035194,
"nYields" : 3396,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"ldate" : [
[
ISODate("292278995-01--2147483647T07:12:56.808Z"),
ISODate("2012-06-01T07:00:00Z")
]
]
}
},
{
"cursor" : "BtreeCursor keywords_1 multi",
"nscanned" : 88526,
"nscannedObjects" : 88526,
"n" : 2515,
"millis" : 1071902,
"nYields" : 56,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"keywords" : [
[
"Help",
"Help"
],
[
"Support",
"Support"
]
]
}
}
],
"nscanned" : 1582398,
"nscannedObjects" : 1582398,
"n" : 1496387,
"millis" : 1071902
}
Y at-il quelque chose que je peux être indexation mieux faire de ce plus rapide? Semble juste moyen de ralentir ...
Merci d'avance!
quel est votre indice? est juste une date déposée? – RameshVel
J'ai essayé de créer des index séparés sur les mots-clés et la date; et essayé de les créer comme un index composé à travers les deux. – Petrogad
Hmm Vous allez chercher des enregistrements de 1,4m là ... c'est un peu, vous pouvez essayer d'étendre le minuteur sur le curseur mongo pour une requête aussi grande. Aussi quelle est votre configuration ici?17m est un temps très long J'admets – Sammaye