Abfrageleistung optimieren

Verwenden Sie Abfrageerläuterung, um den Abfrageausführungsplan und das Ausführungsprofil der Laufzeit abzurufen und Probleme mit langsamen Abfragen zu beheben. Im folgenden Abschnitt werden die Schritte beschrieben, mit denen Sie die Abfrageleistung je nach Ausführungsprofil optimieren können:

Anzahl der Ergebnisse begrenzen

Anhand des Felds „Zurückgegebene Datensätze“ im Ausführungsbaum können Sie feststellen, ob die Abfrage viele Dokumente zurückgibt. Sie können die Anzahl der zurückgegebenen Dokumente mit der $limit-Klausel begrenzen. Dadurch wird die Größe der serialisierten Bytes der Ergebnisse reduziert, wenn sie über das Netzwerk an die Clients zurückgegeben werden. Wenn dem Limit-Knoten ein MajorSort-Knoten vorangestellt ist, kann die Abfragemaschine die Limit- und MajorSort-Knoten zusammenführen und eine vollständige In-Memory-Materialisierung und ‑Sortierung durch eine TopN-Sortierung ersetzen, wodurch der Arbeitsspeicherbedarf für die Abfrage reduziert wird.

Größe des Ergebnisdokuments begrenzen

Sie können die Größe des zurückgegebenen Dokuments mithilfe der $project-Klausel begrenzen, um das Abrufen unnötiger Felder zu vermeiden. Dadurch werden die Rechen- und Arbeitsspeicherkosten für die Verarbeitung von Zwischenergebnissen und die serialisierte Byte-Größe der Ergebnisse reduziert, wenn sie über das Netzwerk an die Clients zurückgegeben werden. Wenn alle in der Abfrage referenzierten Felder von einem regulären Index (kein Multikey-Index) abgedeckt sind, kann die Abfrage vollständig durch den Indexscan abgedeckt werden, sodass keine Dokumente aus dem primären Speicher abgerufen werden müssen.

Indexe verwenden

Folgen Sie der folgenden Anleitung, um Indexe einzurichten und zu optimieren.

Prüfen, ob für die Abfrage ein Index verwendet wird

Ob für die Abfrage ein Index verwendet wird, können Sie an den Endknoten im Ausführungsbaum erkennen. Wenn der Endknoten des Ausführungsbaums ein TableScan-Knoten ist, wird für die Abfrage kein Index verwendet und es werden Dokumente aus dem primären Speicher gescannt. Wenn ein Index verwendet wird, werden im Endknoten des Ausführungsbaums die Index-ID und die Indexfelder des Index angezeigt.

Prüfen, ob der verwendete Index optimiert werden kann

Ein Index ist für eine Abfrage nützlich, wenn damit die Anzahl der Dokumente reduziert werden kann, die die Abfragemaschine aus dem primären Speicher abrufen muss, oder wenn die Feldsortierung die Sortieranforderung der Abfrage erfüllen kann.

Wenn für eine Abfrage ein Index verwendet wird, die Abfrage-Engine aber trotzdem viele Dokumente abruft und verwirft, was sich an einem Scanknoten mit vielen zurückgegebenen Einträgen und einem nachfolgenden Filterknoten mit wenigen zurückgegebenen Einträgen erkennen lässt, ist das ein Zeichen dafür, dass das Abfrageprädikat, das mit dem Index erfüllt wird, nicht selektiv ist. Informationen zum Erstellen eines geeigneteren Index finden Sie unter Indexe erstellen.

Wenn für eine Abfrage ein nicht mehrspaltiger Index verwendet wird, die Abfrage-Engine aber trotzdem eine In-Memory-Neusortierung der Ergebnismenge durchführt, was durch einen MajorSort-Knoten im Abfrageausführungsbaum angezeigt wird, ist das ein Zeichen dafür, dass der verwendete Index nicht für die Sortiervorgabe der Abfrage verwendet werden kann. Im nächsten Abschnitt erfahren Sie, wie Sie einen geeigneteren Index erstellen.

Indexe erstellen

Folgen Sie der Dokumentation zur Indexverwaltung, um Indexe zu erstellen. Damit für Ihre Abfrage Indexe verwendet werden können, erstellen Sie reguläre (nicht mehrstellige) Indexe mit Feldern in der folgenden Reihenfolge:

  1. Alle Felder, die in Gleichheitsoperatoren verwendet werden. Um die Wahrscheinlichkeit der Wiederverwendung in Abfragen zu maximieren, sollten Sie die Felder in absteigender Reihenfolge der Häufigkeit ihrer Verwendung in Gleichheitsoperatoren in Abfragen anordnen.
  2. Alle Felder, nach denen sortiert wird (in derselben Reihenfolge).
  3. Felder, die in Bereichs- oder Ungleichheitsoperatoren in absteigender Reihenfolge der Selektivität der Abfrageeinschränkung verwendet werden.
  4. Felder, die im Index als Teil einer Abfrage zurückgegeben werden: Wenn Sie solche Felder in den Index aufnehmen, kann der Index die Abfrage abdecken und es muss kein Dokument aus dem primären Speicher abgerufen werden.

Für Abfragen, bei denen Arrayfelder gefiltert und sortiert werden, sollten Sie Multischlüsselindexe erstellen.

Abfragehinweis verwenden

Wenn Sie einen geeigneteren Index für die Abfrage erstellt haben, dieser aber nicht von der Abfrage-Engine verwendet wird, können Sie die Indexeinstellung der Abfrage-Engine mithilfe eines Abfragehinweises überschreiben.