Was ist eine analytische Abfrage?
Eine analytische Abfrage fasst viele Zeilen einer Tabelle zu wenigen Zahlen zusammen, zum Beispiel zum Umsatz je Filiale.
Sie liest nur wenige Spalten, aber sehr viele Zeilen. Genau dafür sind spaltenorientierte Datenbanken wie DuckDB gebaut.
Heute sehen Sie, warum das schneller ist.
Am Ende dieser Lektion
Notiz
Ich kann erklären, warum eine analytische Abfrage eine Tabelle anders liest als die Suche nach einer einzelnen Zeile.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Analytische Abfrage | fasst viele Zeilen zu wenigen Werten zusammen | |
| Zeilenspeicher | legt alle Werte einer Zeile nebeneinander ab | |
| Spaltenspeicher | legt alle Werte einer Spalte nebeneinander ab | |
| Aggregatfunktion | macht aus vielen Werten einen einzigen | sum(menge) |
| DuckDB | eine spaltenorientierte Datenbank für Analysen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Wie legt eine Datenbank eine Tabelle ab?
Eine Tabelle sieht aus wie ein Raster. Im Speicher liegen die Werte aber in einer langen Reihe.
Ein Zeilenspeicher legt die Werte Zeile für Zeile ab: erst alles zur ersten Zeile, dann alles zur zweiten. Ein Spaltenspeicher legt sie Spalte für Spalte ab: erst alle Mengen, dann alle Filialen.
Beide halten dieselben Daten. Nur die Reihenfolge ist anders.
Dieselben drei Verkäufe, zwei Reihenfolgen
| Speicherart | So liegen die Werte hintereinander |
|---|---|
| Zeilenspeicher | 12, Berlin, Kaffee, dann 8, Hamburg, Kaffee, dann 15, Muenchen, Kaffee |
| Spaltenspeicher | 12, 8, 15, dann Berlin, Hamburg, Muenchen, dann Kaffee, Kaffee, Kaffee |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Suche braucht Zeilen, Analyse braucht Spalten
Eine Suche fragt: Zeige mir Verkauf 4. Sie braucht alle Werte einer Zeile. Ein Zeilenspeicher liefert sie in einem Stück.
Eine Analyse fragt: Wie viel wurde insgesamt verkauft? Sie braucht eine Spalte aus allen Zeilen. Ein Spaltenspeicher liest nur diese Spalte und lässt den Rest liegen.
Hat eine Tabelle 20 Spalten und die Abfrage nennt zwei, muss grob nur ein Zehntel der Daten gelesen werden.
Probieren Sie es: eine Spalte summieren
-- Eine Spalte, alle Zeilen: so liest eine Analyse.
select sum(menge) as gesamtmenge
from verkaeufe;
-- Ersetzen Sie sum durch avg und vergleichen Sie.
Eine Aggregatfunktion macht aus vielen Werten einen
Die Werkzeuge einer Analyse heißen Aggregatfunktionen. count(*) zählt Zeilen. sum addiert, avg bildet den Durchschnitt, min und max finden den kleinsten und den größten Wert.
Allein fasst eine Aggregatfunktion die ganze Tabelle zusammen. Mit group by bekommen Sie eine Zusammenfassung je Wert einer Spalte.
Ein Spaltenspeicher liest dafür nur die Spalten, die in der Abfrage stehen.
Probieren Sie es: je Filiale verdichten
-- Je Filiale eine Zeile, aus allen Zeilen verdichtet.
select filiale, count(*) as verkaeufe, sum(menge) as gesamtmenge
from verkaeufe
group by filiale
order by filiale;
-- Fügen Sie die Spalte avg(betrag_euro) als schnitt_euro hinzu.
Ein häufiger Fehler
Warnung
Viele glauben, ein Spaltenspeicher sei immer schneller. Das stimmt nicht. Für die ganze Zeile eines Verkaufs ist ein Zeilenspeicher oft besser. Wählen Sie den Spaltenspeicher, wenn Abfragen viele Zeilen und wenige Spalten lesen.