Abgesehen von dem, was die Leute bereits erwähnt haben, führe ich nur Indizes in die Mischung ein.
Stellen Sie sich also eine große Sammlung vor, mit sagen wir über 1 Million Dokumenten, und Sie müssen eine Abfrage wie diese ausführen.
Der interne Cache von WiredTiger muss all diese Daten im Cache behalten, wenn Sie diese Abfrage darauf ausführen müssen. Andernfalls werden diese Daten entweder aus dem FS-Cache oder von der Festplatte in den WT-Internen Cache eingespeist, bevor der Abruf aus der DB erfolgt (chargenweise, wenn dieser von einem Treiber abgerufen wird, der mit der Datenbank verbunden ist, und vorausgesetzt, dass 1 Million Dokumente nicht auf einmal zurückgegeben werden, wenn ein Cursor ins Spiel kommt).
Abgedeckte Abfrage kann eine Alternative sein. Kopieren Sie den Text direkt aus Dokumentation.
Wenn ein Index eine Abfrage abdeckt, kann MongoDB sowohl die Abfragebedingungen erfüllen als auch die Ergebnisse nur mit den Indexschlüsseln zurückgeben; d.h. MongoDB muss keine Dokumente aus der Sammlung untersuchen, um die Ergebnisse zurückzugeben.
Wenn ein Index eine Abfrage abdeckt, hat das Erklärungsergebnis eine IXSCAN-Phase, die nicht von einer FETCH-Phase abstammt, und in den executionStats ist totalDocsExamined 0.
Abfrage: db.getCollection('qaa').find({roll_no : {$gte : 0}},{_id : 0, roll_no : 1})
Index: db.getCollection('qaa').createIndex({roll_no : 1})
Wenn der Index hier im WT-Internen Cache liegt, kann dies ein einfacher Prozess sein, um die Werte zu erhalten. Ein Index wirkt sich auf die Schreibleistung des Systems aus, daher würde dies mehr Sinn ergeben, wenn die Lesevorgänge im Vergleich zu den Schreibvorgängen häufiger sind.