MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB + Python - sehr langsame einfache Abfrage

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 und month
  • year und month und day
  • year und month und day und hour

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!