Sind Sie sicher, dass Ihr Index erstellt wurde? könnten Sie die Ausgabe von getIndexes()
bereitstellen Ihrer Sammlung
zB:db.my_collection.getIndexes()
und die Erläuterung Ihrer Anfrage
db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28 }).explain()
PS:Natürlich muss ich @Ästhete zustimmen, dass Sie viel mehr speichern, als Sie brauchen ...
Aktualisierung vom 01.01.2014
Perfekt! Wie Sie sehen, haben Sie vier verschiedene Indizes, wenn Sie EINEN zusammengesetzten Index erstellen können, der alle enthält.
definieren
db.my_collection.ensureIndex({created_at_year: 1, created_at_month: 1, created_at_day: 1, created_at_hour: 1 })
stellt Ihnen einen genaueren Index zur Verfügung, mit dem Sie Folgendes abfragen können:
year
year
undmonth
year
undmonth
undday
year
undmonth
undday
undhour
Dadurch werden Ihre Abfragen (mit den vier Schlüsseln) viel schneller, da alle Ihre Kriterien in den Indexdaten erfüllt werden!
Bitte beachten Sie, dass die Reihenfolge der Schlüssel in ensureIndex()
entscheidend ist, dass die Reihenfolge tatsächlich die oben genannte Liste von Abfragen definiert!
Beachten Sie auch, dass Sie, wenn Sie nur diese 4 Felder benötigen, eine korrekte Projektion angeben,
zB:db.my_collection.find({created_at_year: 2014, created_at_month: 1, created_at_day: 28}, { created_at_year: 1, created_at_month: 1, created_at_day: 1 })
dann wird nur der Index verwendet, was die maximale Leistung ist!