Datenbankstatistiken • Ziel: Selektivitäten von Prädikaten abschätzen. • Anders ausgedrückt: Die Größe von Zwischenergebnissen abschätzen. • Anlegen von Statistiken: analyze table R ... • Syntax ist abhängig vom Datenbanksystem. • Art der Statistiken ist abhängig vom System. • Updates der Statistiken ist abhängig vom System: – Explizit durch neues analyze (Oracle, IBM DB2, ...) – Automatisch bei Änderungen (Microsoft SQL Server) Art der Statistiken • Größe von Tabellen – Anzahl der Blöcke auf der Festplatte – Anzahl der Tupel in der Tabelle • Attributwerte – größter und kleinster Wert alternativ: zweitgrößter und zweitkleinster Wert (Selektivität von Bereichsprädikaten) – Anzahl unterschiedlicher Werte (Gruppierung, Selektivität von Joinprädikaten) • Clustereigenschaften von Indexen – Z.B. Kosten eines kompletten Index Scans Berechnung von Statistiken • Volle Analyse einer Tabelle – Parameter des analyze Statements bestimmen den Umfang der Statistiken, die angelegt oder aktualisiert werden – Derzeit üblicher Ansatz in fast allen Systemen • Sampling (Stichprobenverfahren) – – – – Analysiert nur Teile einer Tabelle Wird manchmal „on the fly“ eingesetzt Evtl. spezielle Analyse von „Outliern“ Wird derzeit von fast keinem System unterstützt Equi-Width Histogramme 100 90 80 70 60 50 40 30 20 10 0 20 bis 30 30 bis 40 40 bis 50 50 bis 60 60 bis 70 Equi-Depth Histogramme 60 50 40 30 20 10 0 20 bis 42 42 bis 48 48 bis 53 53 bis 59 59 bis 70 Berechnung von Selektivitäten • Gleichverteilungsannahme: Innerhalb eines Buckets eines Histogramms kommt jeder Wert gleich häufig vor. • Beispiel im Equi-Depth Histogramm: Wieviele Professoren sind jünger als 45 Jahre? • Antwort: 1 Bucket + ½ Buckets = 79 Selektivität des Prädikates: 78 / 260 • Wieviele Professoren sind jünger als 45 Jahre und verdienen mehr als DM 100.000 im Jahr? • Unabhängigkeitsannahme: multipliziere Selektiv. Multi-Dimensionale Histogramme 60 50 40 70-100 100-150 150-250 30 20 10 0 20 bis 30 30 bis 40 40 bis 50 50 bis 60 60 bis 70