ScholarGate
Assistent

Abfrageausführungsoperatoren

Abfrageausführungsoperatoren sind die physikalischen Algorithmen – Scans, Selektionen, Projektionen, Sortierungen, Aggregationen und Joins –, die eine Datenbank-Engine zu einem Plan zusammensetzt und ausführt, um das Ergebnis einer Abfrage zu erzeugen.

Thema finden mit PaperMindDemnächstFind papers & topics
Tools & resources
Folien herunterladen
Learn & explore
VideoDemnächst

Definition

Ein Abfrageausführungsoperator ist eine Implementierung einer relationalen Algebraoperation als Algorithmus über Tupelströme; Operatoren werden zu einem Baum oder einer Pipeline zusammengesetzt, die bei Ausführung das Ergebnis einer Abfrage berechnet.

Scope

Dieses Thema behandelt die physikalischen Operatoren einer Abfrage-Engine und deren Organisation für die Ausführung: das Iterator-Modell (open-next-close), Pipelining versus Materialisierung, Tabellen- und Index-Scans, Selektion und Projektion, externes Mergesort, Gruppierung und Aggregation sowie Duplikatseliminierung. Es wird behandelt, wie Operatoren Tupelströme konsumieren und produzieren und wie Speicher und E/A deren Kosten beeinflussen. Spezifika von Join-Algorithmen und der Optimierer, der zwischen Operatoren wählt, werden als angrenzende Themen ausgeschlossen.

Core questions

  • Wie ermöglicht das Iterator-Modell (open-next-close) die Zusammensetzung von Operatoren zu einer Pipeline?
  • Wann wird ein Ergebnis gepipelined versus auf die Festplatte materialisiert?
  • Wie werden Selektion, Projektion und Duplikatseliminierung physikalisch implementiert?
  • Wie verarbeitet externes Mergesort Daten, die größer als der Speicher sind?
  • Wie beeinflussen Speicherbudget und E/A-Kosten die Operatorleistung?

Key concepts

  • Iterator / Open-Next-Close-Modell
  • Tabellen- und Index-Scans
  • Selektions- und Projektionsoperatoren
  • externes Mergesort
  • Hash-basierte Gruppierung
  • Aggregationsoperatoren
  • Duplikatseliminierung
  • Pipelining versus Materialisierung

Key theories

Das Iterator-Modell (Volcano)
Jeder Operator stellt open-, next- und close-Methoden bereit und zieht bei Bedarf Tupel von seinen Kindern; diese einheitliche Schnittstelle ermöglicht die Zusammensetzung beliebiger Operatoren zu Pipelines und ist die Grundlage der meisten Abfrage-Engines.
Pipelining versus Materialisierung
Gepipelined-Operatoren geben Tupel direkt an ihr Elternelement weiter, ohne Zwischenergebnisse zu schreiben, was E/A spart, während blockierende Operatoren wie Sort ihre Eingabe materialisieren müssen, bevor sie eine Ausgabe erzeugen; der Optimierer gleicht die beiden aus.
Externes Sortieren und Aggregieren
Wenn Daten den Speicher überschreiten, verarbeiten externes Mergesort und Hash-basierte Gruppierung diese in Durchläufen über die Festplatte; diese Algorithmen liegen ORDER BY, GROUP BY, Duplikatseliminierung und Sort-Merge-Joins zugrunde.

Clinical relevance

Ausführungsoperatoren sind der Punkt, an dem die geschätzten Kosten eines Abfrageplans zu realer Laufzeit werden: Die Wahl und Implementierung der Operatoren und wie gut sie den Speicher nutzen und unnötige Festplatten-E/A vermeiden, bestimmen den Durchsatz und die Latenz jeder Abfrage, die eine Datenbank bedient.

History

Das Iterator-Modell wurde in Graefes Volcano-Abfrageauswertungs-Framework und seiner Übersicht über Abfrageauswertungstechniken von 1993, die die von relationalen Engines verwendeten physikalischen Operatoren katalogisierte, kristallisiert. Die einheitliche Schnittstelle des Modells machte erweiterbare, zusammensetzbare Abfrage-Engines praktikabel und bleibt Standard, wobei spätere Arbeiten vektorisierte und kompilierte Ausführung für größere Effizienz hinzufügten.

Key figures

  • Goetz Graefe
  • Jeffrey D. Ullman

Related topics

Seminal works

  • graefe1993
  • garciamolina2008

Frequently asked questions

Was ist das Iterator-Modell?
Es ist ein Design, bei dem jeder physikalische Operator dieselbe Schnittstelle implementiert – typischerweise open, next und close – und Tupel einzeln produziert, wenn sein Elternelement next aufruft. Da alle Operatoren diese Schnittstelle teilen, können sie zu beliebigen Planbäumen zusammengesteckt werden, und Tupel fließen bei Bedarf den Baum hinauf.
Warum werden einige Operatoren als blockierend bezeichnet?
Ein blockierender Operator kann keine Ausgabe erzeugen, bevor er seine gesamte Eingabe konsumiert hat – Sortieren und bestimmte Aggregationen sind Beispiele, da das Endergebnis von jedem Eingabetupel abhängt. Blockierende Operatoren müssen ihre Eingabe materialisieren, während gepipelined-Operatoren wie die Selektion Ergebnisse fortlaufend ausgeben können.

Methods for this concept

Related concepts