MongoDB-Indizes: Top-Indextypen und deren Verwaltung

MongoDB-Indizes: Top-Indextypen und deren Verwaltung

  • Orchestrierung
6 Minuten Lesezeit Aktualisiert Apr 21, 2025

Auf einen Blick: MongoDB-Indizes erhöhen die Geschwindigkeit der Datenabrufe und ermöglichen effiziente Abfragen, indem das Dokumentenscannen minimiert wird. Der Leitfaden beschreibt verschiedene Indextypen, Erstellungsmethoden und Leistungsaspekte.

  • Indextypen umfassen Einzelfeld-, zusammengesetzte, Mehrschlüssel-, geospatiale, Text- und gehashte Indexe.
  • Einzigartige und spärliche Indizes erhalten die Datenintegrität und optimieren den Speicher.

MongoDB-Indizes bieten den Nutzern eine effiziente Möglichkeit, Daten abzufragen. Wenn Daten ohne Indizes abgefragt werden, muss die Abfrage nach allen Datensätzen in einer Datenbank suchen, um Daten zu finden, die mit der Abfrage übereinstimmen.

In MongoDB wird Abfragen ohne Indizes als Sammlungsscan bezeichnet. Ein Sammlungsscan bewirkt:

  • Das führt zu verschiedenen Leistungsengpässen
  • Verlangsamen Sie Ihre Bewerbung erheblich

Glücklicherweise beheben die Verwendung von MongoDB-Indizes beide Probleme. Indem Sie die Anzahl der abzufragenden Dokumente begrenzen, verbessern Sie die Gesamtleistung der Anwendung.

In diesem Tutorial führe ich Sie durch verschiedene Arten von Indizes und zeige Ihnen, wie Sie Indizes in MongoDB erstellen, finden und verwalten.

Was sind Indizes in MongoDB?

Was sind Indizes in MongoDB?

MongoDB-Indizes sind spezielle Datenstrukturen, die es schneller machen, eine Datenbank abzufragen. Sie beschleunigen das Finden und Abrufen von Daten, indem sie einen kleinen Teil des Datensatzes effizient speichern – man muss nicht jedes Dokument in einer Datensammlung durchsuchen.

MongoDB-Indizes speichern die Werte der indexierten Felder außerhalb der Datenerhebung und verfolgen deren Position auf der Festplatte. Die indizierten Felder sind nach den Werten geordnet. Das erleichtert die Durchführung von Gleichheitsabgleichungen und effiziente Bereichsabfragen. Man kann MongoDB-Indizes auf Sammlungsebene definieren, da Indizes für jedes beliebige Feld oder Teilfeld in einer Sammlung unterstützt werden.

Sie können die Indizes Ihrer Datensammlungen entweder mit der Atlas-CLI oder der Atlas-Benutzeroberfläche verwalten. Beides macht die Abfrageausführung effizienter.

Warum brauchen wir Indizes in MongoDB?

Indizes sind in MongoDB von unschätzbarem Wert. Sie sind eine effiziente Möglichkeit, Informationen in einer Sammlung zu organisieren, und beschleunigen Abfragen, sodass relevante Ergebnisse schneller zurückgegeben werden. Durch die Verwendung eines Index zum Gruppieren, Sortieren und Abrufen von Daten sparen Sie erhebliche Zeit. Ihre Datenbank-Engine muss nicht mehr jeden Datensatz durchsuchen, um Übereinstimmungen zu finden.

Was sind die Nachteile des Indexierens?

Indexierung hat allerdings einige Nachteile. Die Leistung bei Schreibvorgängen wird von jedem erstellten Index beeinflusst, und jeder nimmt Speicherplatz ein. Um Sammlungsaufblähungen und langsame Schreibvorgänge zu vermeiden, erstelle nur Indizes, die wirklich notwendig sind.

Wie viele Indizes kannst du verwenden?

MongoDB-Indizes sind auf 64 pro Datenerhebung begrenzt. In einem zusammengesetzten Index kann man nur 32 Felder haben. Die $text Abfrage benötigt einen speziellen Textindex – man kann ihn nicht mit einem anderen Abfrageoperator kombinieren, der einen anderen speziellen Index benötigt.

Arbeit mit Indizes

Für dieses Tutorial verwenden wir den folgenden Datensatz, um die Indexierungsfunktionalität von MongoDB zu demonstrieren:

    use students
db.createCollection("studentgrades")
db.studentgrades.insertMany(
    [
        {name: "Barry", subject: "Maths", score: 92},
        {name: "Kent", subject: "Physics", score: 87},
        {name: "Harry", subject: "Maths", score: 99, notes: "Exceptional Performance"},
        {name: "Alex", subject: "Literature", score: 78},
        {name: "Tom", subject: "History", score: 65, notes: "Adequate"}
    ]
)
db.studentgrades.find({},{_id:0})

Ergebnis

Datensatz zur Demonstration der Indexierungsfunktionalität von MongoDB.

Sind MongoDB-Indizes einzigartig?

Beim Erstellen von Dokumenten in einer Sammlung erstellt MongoDB einen eindeutigen Index mit dem _id-Feld. MongoDB bezeichnet dies als Default _id Index. Dieser Standardindex kann nicht aus der Sammlung entfernt werden.

Beim Abfragen des Testdatensatzes sehen Sie das _id-Feld, das als Standardindex verwendet wird:

    db.studentgrades.find().pretty()

Ergebnis:

Das _id Feld ist der Default _id Index.

Wie man einen Index in MongoDB erstellt

Um einen Index in MongoDB zu erstellen, verwenden Sie die createIndex()-Methode mit folgender Syntax:

    db..createIndex(, )

Beim Erstellen eines Index definieren Sie das zu indexierende Feld und die Richtung der Taste (1 oder -1), um die aufsteigende oder absteigende Reihenfolge anzuzeigen.

Wenn Sie einen absteigenden Einfeldindex verwenden, kann dies die Leistung verringern. Es ist besser, aufsteigende Einfeldindizes zu verwenden, wenn Sie optimale Ergebnisse erzielen möchten.

Ein weiterer Punkt, den man beachten sollte, sind die Indexnamen. Standardmäßig generiert MongoDB Indexnamen, indem die indexierten Schlüssel mit der Richtung jedes Schlüssels im Index unter Verwendung eines Unterstrichs als Trenner verkettet werden. Zum Beispiel: {name: 1} wird als name_1 erstellt.

Die beste Praxis ist, die Namensoption zu verwenden, um beim Erstellen eines Index einen benutzerdefinierten Indexnamen zu definieren. Indizes können nach der Erstellung nicht umbenannt werden. Die einzige Möglichkeit, einen Index umzubenennen, besteht darin, diesen Index zuerst zu entfernen, den wir unten zeigen, und ihn mit dem gewünschten Namen neu zu erstellen.

createIndex()-Beispiel

Lassen Sie uns einen Index mit dem Namensfeld in der studentgrades-Sammlung erstellen und ihn als Student Name Index benennen.

    db.studentgrades.createIndex(
{name: 1},
{name: "student name index"}
)

Ergebnis:

Erstellung eines Index namens Student Name Index.

Indizes in MongoDB finden

Alle verfügbaren Indizes in einer MongoDB-Sammlung können Sie mit der getIndexes() -Methode finden. Dadurch werden alle Indizes einer bestimmten Sammlung zurückgegeben.

    db..getIndexes()

getIndexes()-Beispiel

Sehen wir uns alle Indizes in der studentgrades-Sammlung mit folgendem Befehl an:

    db.studentgrades.getIndexes()

Ergebnis:

getIndexes()-Beispiel in MongoDB.

Die Ausgabe enthält den Standard-_id-Index und den vom Benutzer erstellten Index-Studentennamen-Index.

Wie man Indizes in MongoDB auflistet

Sie können Indizes einer Datensammlung mit Shell oder Kompass auflisten. Dieser Befehl gibt Ihnen ein Array von Indexdokumenten an:

    db.collection.getIndexes()

Eine Alternative ist die Verwendung der MongoDB Atlas UI. Öffnen Sie einen Cluster und gehen Sie zum Reiter Sammlungen . Wählen Sie die Datenbank und die Sammlung aus und klicken Sie dann auf Indexes , um sie zu sehen.

Schließlich können Sie den folgenden Befehl in der MongoDB Atlas CLI verwenden, um die Indizes einzusehen:

    atlas clusters index list --clusterName  --db  --collection

Wie man Indizes in MongoDB löscht

Um einen Index aus einer MongoDB-Sammlung zu entfernen oder zu löschen, verwenden Sie die dropIndex() -Methode, während Sie den zu entfernenden Indexnamen angeben.

    db..dropIndex()

dropIndex()-Beispiele

Entfernen wir den vom Nutzer erstellten Index mit dem Indexnamen Student Name Index, wie unten gezeigt.

    db.studentgrades.dropIndex("student name index")

Ergebnis:

Beispiel, wie man einen MongoDB-Index mit einem Namen löscht.

Du kannst auch den Wert des Indexfeldes verwenden, um einen Index ohne definierten Namen zu entfernen:

    db.studentgrades.dropIndex({name:1})

Ergebnis:

Beispiel dafür, wie man einen MongoDB-Index ohne Namen löscht.

Der Befehl dropIndexes kann außerdem alle Indizes außer dem Standardindex _id entfernen.

    db.studentgrades.dropIndexes()

Ergebnis:

Beispiel, wie man alle MongoDB-Indizes löscht.

Welche verschiedenen Arten von Indizes gibt es in MongoDB?

Die verschiedenen Arten von Indizes in MongoDB.

MongoDB bietet verschiedene Arten von Indexen, die je nach Bedarf der Nutzer genutzt werden können. Hier sind die wichtigsten Indextypen in MongoDB:

  • Einzelfeldindex
  • Zusammengesetzter Index
  • Mehrfach-Index

Zusätzlich zu den oben genannten beliebten Indextypen bietet MongoDB auch einige spezielle Indextypen für gezielte Anwendungsfälle an:

  • Geospatial Index
  • Testindex
  • Hashe-Index

Einzelfeldindex

Diese benutzerdefinierten Indizes verwenden ein einzelnes Feld in einem Dokument, um einen Index in aufsteigender oder absteigender Sortierreihenfolge (1 oder -1) zu erstellen. In einem einzelnen Feldindex hat die Sortierreihenfolge des Indexschlüssels keinen Einfluss, da MongoDB den Index in beide Richtungen durchlaufen kann.

Beispiel

    db.studentgrades.createIndex({name: 1})

Ergebnis:

Erstellung eines einzelnen Feldindex in MongoDB.

Der obige Index sortiert die Daten in aufsteigender Reihenfolge anhand des Namensfelds. Du kannst die Sort()- Methode verwenden, um zu sehen, wie die Daten im Index dargestellt werden.

    db.studentgrades.find({},{_id:0}).sort({name:1})

Ergebnis:

Verwenden Sie die sort()-Methode, um die Daten zu sehen.

Zusammengesetzter Index

Man kann mehrere Felder in einem MongoDB-Dokument verwenden, um einen zusammengesetzten Index zu erstellen. Dieser Indextyp verwendet das erste Feld für die Anfangssortierung und sortiert dann nach den vorherigen Feldern.

Beispiel

Im folgenden zusammengesetzten Index wird MongoDB:

  • Sortiere zuerst nach dem Fachbereich
  • Dann sortiere innerhalb jedes Fachwerts nach Note
    db.studentgrades.createIndex({subject: 1, score: -1})
MongoDB Compound-Index-Beispiel.

Der Index würde eine Datenstruktur erstellen, die der folgenden ähnelt:

    db.studentgrades.find({},{_id:0}).sort({subject:1, score:-1})

Ergebnis:

Indexdatenstruktur.

MongoDB unterstützt die Indexierung von Array-Feldern. Wenn Sie einen Index für ein Feld mit einem Array erstellen, erstellt MongoDB separate Indexeinträge für jedes Element im Array. Diese Multikey-Indizes ermöglichen es den Nutzern, Dokumente mit den Elementen im Array abzufragen.

MongoDB erstellt automatisch einen Multikey-Index, wenn es mit einem Array-Feld konfrontiert wird, ohne dass der Benutzer den Multikey-Typ explizit definieren muss.

Lassen Sie uns einen neuen Datensatz mit einem Array-Feld erstellen, um die Erstellung eines Multischlüssel-Index in MongoDB zu demonstrieren.

    db.createCollection("studentperformance")
db.studentperformance.insertMany(
[
{name: "Barry", school: "ABC Academy", grades: [85, 75, 90, 99] },
{name: "Kent", school: "FX High School", grades: [74, 66, 45, 67]},
{name: "Alex", school: "XYZ High", grades: [80, 78, 71, 89]},
]
)
db.studentperformance.find({},{_id:0}).pretty()

Ergebnis:

Erstellung eines Multikey-Index-Datensatzes in MongoDB.

Jetzt erstellen wir einen Index mit dem Feld Noten.

    db.studentperformance.createIndex({grades:1})

Ergebnis:

Erstellung eines Multischlüssel-Index in MongoDB.

Der obige Code erstellt automatisch einen Multikey-Index in MongoDB. Wenn Sie ein Dokument mit dem Array-Feld (grades) anfragen, sucht MongoDB nach dem ersten Element des in der find() -Methode definierten Arrays und anschließend nach der gesamten passenden Abfrage.

Betrachten wir zum Beispiel die folgende Suchfrage:

    db.studentperformance.find({grades: [80, 78, 71, 89]}, {_id: 0})

Anfangs verwendet MongoDB den Multikey-Index für die Suche in Dokumenten, bei denen das Grades-Array das erste Element (80) an jeder Position enthält. Dann werden innerhalb dieser ausgewählten Dokumente die Dokumente mit allen passenden Elementen ausgewählt.

Geospatialer Index

MongoDB stellt zwei Arten von Indizes bereit, um die Effizienz von Datenbankabfragen bei der Verarbeitung von georäumlichen Koordinatendaten zu erhöhen:

  • 2D-Indizes , die planare Geometrie verwenden, die für Altkoordinatenpaare gedacht ist, die in MongoDB 2.2 und früher verwendet werden.
  • 2Dsphären-Indexen , die kugelförmige Geometrie verwenden.

Syntax:

    db..createIndex( {  : "2dsphere" } )

Textindex

Der Textindextyp ermöglicht es Ihnen, den Inhalt der Zeichenketten in einer Sammlung zu durchsuchen.

Syntax:

    db..createIndex( { : "text" } )

Hashe-Index

Der Indextyp MongoDB Hashed wird verwendet, um die Hash-basierte Sharding-Funktionalität zu unterstützen. Dies würde den Hashwert des angegebenen Feldes indizieren.

Syntax:

    db..createIndex( {  : "hashed" } )

Eigenschaften des MongoDB-Index

Sie können die Funktionalität eines Index weiter verbessern, indem Sie Indexeigenschaften nutzen. In diesem Abschnitt lernen Sie diese häufig verwendeten Indexeigenschaften kennen:

  • Sparse-Index-Eigenschaft
  • Partielle Indexeigenschaft
  • Eindeutige Indexeigenschaft

Sparse-Index-Eigenschaft

Die Sparse-Eigenschaft MongoDB erlaubt es Indexen, Indexierungsdokumente in einer Sammlung wegzulassen, wenn das indexierte Feld in einem Dokument nicht verfügbar ist, und einen Index zu erstellen, der nur die Dokumente enthält, die das indexierte Feld enthalten.

Beispiel

    db.studentgrades.createIndex({notes:1},{sparse: true})

Ergebnis:

Beispiel für eine Sparse-Index-Eigenschaft in MongoDB.

In der vorherigen Studentgrades-Sammlung wird ein Index mit dem Notizenfeld nur zwei Dokumente indexiert, da das Notizenfeld nur in zwei Dokumenten vorhanden ist.

Partielle Indexeigenschaft

Die Funktion des partiellen Indexes ermöglicht es Benutzern, Indizes zu erstellen, die einer bestimmten Filterbedingung entsprechen. Partielle Indizes verwenden die Option partialFilterExpression, um die Filterbedingung anzugeben.

Beispiel

    db.studentgrades.createIndex(
{name:1},
{partialFilterExpression: {score: { $gte: 90}}}
)

Ergebnis:

Beispiel für eine partielle Index-Eigenschaft in MongoDB.

Der obige Code erstellt einen Index für das Namensfeld, enthält jedoch nur Dokumente, in denen der Wert des Punktfeldes größer oder gleich 90 ist.

Eindeutige Indexeigenschaft

Die eindeutige Eigenschaft ermöglicht es Nutzern, einen MongoDB-Index zu erstellen, der nur eindeutige Werte enthält. Dies wird:

  • Lehne alle doppelten Werte im indizierten Feld ab
  • Beschränken Sie den Index auf Dokumente, die eindeutige Werte enthalten

Beispiel

    db.studentgrades.createIndex({name:1},{unique: true})

Ergebnis:

Beispiel für eine eindeutige Indexeigenschaft in MongoDB.

Der oben erstellte Index beschränkt die Indexierung auf Dokumente mit eindeutigen Werten im Namensfeld.

Indexzusammenfassung

Damit ist dieses MongoDB-Index-Tutorial und -Leitfaden abgeschlossen. Sie haben gelernt, wie man Indizes erstellt, findet und ablegt, verschiedene Indextypen verwendet und komplexe Indizes erstellt. Diese Indizes können dann genutzt werden, um die Funktionalität der MongoDB-Datenbanken weiter zu verbessern und die Leistung von Anwendungen zu steigern, die schnelle Datenbankabfragen nutzen.

Verwandte Literatur

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus Orchestrierung

Abonnieren Sie The Brief

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Danke

Sie haben The Brief abonniert
Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.