mit Gibt es einen Unterschied in der Ausführungszeit zwischen den zwei Abfragen in pymongo
:Abfrage Einfeldmehrfach Ausführungsgeschwindigkeit in mongodb pymongo
db.collection.find({'date': {'$gte': datetime(2000, 01, 01), '$lt': datetime(2016, 11, 23)}})
db.collection.find({'date': {'$gte': datetime(2000, 01, 01)}, 'date': {'$lt': datetime(2016, 11, 23)}})
Im zweiten Fall, dass ich das gleiche Feld zweimal am abfragt. Ich habe Mongo-Shell und lief .explain("executionStats")
und der einzige Unterschied war in den Abfragen ("queryPlanner.parsedQuery"
), in dem für die erste war:
"$and" : [
{
"date" : {
"$lt" : ISODate("2016-11-23T00:00:00Z")
}
},
{
"date" : {
"$gte" : ISODate("2000-01-01T00:00:00Z")
}
}
]
und dies für die zweite:
"date" : {
"$lt" : ISODate("2016-11-23T00:00:00Z")
}
Ich bin Abfrage einer Sammlung mit Zehntausenden von Dokumenten und es wird mehrfach abgefragt. Also muss ich die Abfrage optimieren.
Wird das Feld "Datum" indiziert? Wenn nicht, sollte dies der erste Schritt zur Verbesserung der Geschwindigkeit der Operation sein. Wenn dies der Fall ist, gibt es Unterschiede zwischen den beiden EXPLAIN-Plänen zwischen der Verwendung von Indexgrenzen? Möglicherweise müssen Sie .explain erneut ausführen, indem Sie die Option 'true' übergeben, z. ".explain (true)" –
Hey, ich frage mehrere Felder (ca. 6) auf die Sammlung und Indexierung des Datums wird nicht viel helfen. Das Feld "Datum" hat jedoch einen Bereich, und alle anderen Felder stimmen nur mit der Wertgleichheit überein. Also, ich denke @hayades 'Antwort erklärt, dass meine Abfrage tatsächlich falsch ist und beide Abfragen nicht äquivalent sind, da wir nicht denselben Schlüssel für zwei verschiedene Werte in einem Mapping-Typ haben können (in diesem Fall ein Python-Dictionary). –