Sections: Indexstrukturen | Vergleich Indexstrukturen | B-Trees | Zur Repetition | Übung | Bitmap Index | Lösungsvorschlag | Query Optimization | Ziel | Dokumentation | Bemerkungen | Vorbereitung | Basics Explain mit Seq Scan und Caching Behaviour | Index Scan | Aggregate Scan | Nested Loop | Lösungsvorschlag |

Zurück zu Dbs2.

Diese Übung umfasst zwei Teile: Der erste Teil befasst sich mit Indexstrukturen (Aufwand: ca. 1h) und ist eher theoretischer Natur, der zweite Teil ist eine praktische Übung zu Query optimization (Aufwand: ca. 1.5h).

Indexstrukturen ^

Vergleich Indexstrukturen ^

Vergleichen Sie B-Tree, Bitmap und Hash Table Indices anhand der folgenden drei Kriterien:

B-Trees ^

Zur Repetition ^

Ein B-Baum mit Grad k hat folgende Eigenschaften:

  1. Jeder Weg von der Wurzel zu einem Blatt hat die gleiche Länge.
  2. Jeder Knoten ausser der Wurzel hat mindestens k und höchstens 2k Einträge. Die Wurzel hat zwischen einem und 2k Einträgen. Die Einträge werden in allen Knoten sortiert gehalten.
  3. Alle Knoten mit n Einträgen, ausser den Blättern, haben n+1 Kinder.
  4. Seien S1, ..., Sn die Schlüssel eines Knotens mit n+1 Kindern. V0, V1, ..., Vn seien die Verweise auf diese Kinder. Dann gilt:
    • V0 weist auf den Teilbaum mit Schlüsseln kleiner als S1.
    • V1 (i = 1, ..., n-1) weist auf den Teilbaum, dessen Schlüssel zwischen Si und Si+1 liegen.
    • Vn weist auf den Teilbaum mit Schlüsseln grösser als Sn.
    • In den Blattknoten sind die Zeiger nicht definiert.

Übung ^

Fügen Sie in einen anfänglich leeren B-Baum mit k = 2 die Zahlen eins bis zwanzig in aufsteigender Reihenfolge ein. Wie sieht es mit der Auslastung des B-Trees aus?

Bitmap Index ^

Gegeben ist die folgende Tabelle Person. Wie würde ein Bitmap Index für die Spalte titel aussehen?

person_idnametitel
1Alf A. RomeoProf.
2Alma NachDr.
3Axel HaarDr.
4Dennis PlatzDr. habil.
5Egon ZentrischProf.
6Heinz FictionProf.
7Jim BeamProf.
8Klaus UhrProf.
9Sam SonightDr.
10Theo DorantProf.

Lösungsvorschlag ^

http:files/Ex14.pdf

Query Optimization ^

Ziel ^

Optimierung ist ein wichtiger Teil beim Datenbank Performance-Tuning. In dieser Übung geht es darum, nachvollziehen zu können, wie PostgreSQL intern eine Query ausführt, welche Faktoren dabei eine Rolle spielen und welche Optimierungsmassnahmen daraus abgeleitet werden können.

Dokumentation ^

Bemerkungen ^

PostgreSQL hält alle Kataloginformationen in Tabellen. Für diese Übung sind Folgende von besonderer Relevanz: pg_stats, pg_class, pg_indexes und pg_attribute. Diese können wie normale Tabellen abgefragt werden. Als Beispiel dient folgende Query:

SELECT * FROM pg_indexes WHERE tablename = 'orders'

Diese gibt uns alle Informationen über definierte Indizes in der Tabelle orders. Statistiken, die der Optimizer für Tabellen hält, können mit der folgenden Query abgefragt werden:

SELECT * FROM pg_stats where tablename = 'orders'

Die Beschreibung dieser Zahlen finden Sie hier. Allgemeine Informationen zu einer Tabelle kann man entweder über eine Query auf pg_class oder über das \d Kommando in psql in Erfahrung bringen.

Vorbereitung ^

Für diese Übung benötigen wir ein Datenset von entsprechender Grösse. Wir verwenden dazu die DVD-Beispieldatenbank "Dell Store2".

Basics Explain mit Seq Scan und Caching Behaviour ^

wobei seq_page_cost standardmässig 1.0 und cpu_tuple_cost 0.01 ist. Hinweis: disk_pages_read und rows_scanned finden Sie über die Tabelle pg_class heraus.

Wie Sie sehen, wird der Suchbereich ca. um die Hälfe eingegrenzt durch die WHERE Bedingung. Wieso sind die Kosten nicht dementsprechend gesunken?

Index Scan ^

Können Sie sich vorstellen, wieso der Query Optimizer sich entschieden hat einen komplexen Query Plan mit zwei Indizes zu verwenden anstatt einfach nach username zu suchen was zum gleichen Resultat geführt hätte?

Aggregate Scan ^

Nested Loop ^

Lösungsvorschlag ^