Dienstag, Mai 10, 2011

Bitmap Index Cost in 11.2 (Jonathan Lewis)

Obwohl ich vor einiger Zeit allerlei über Bitmap Indizes nachgedacht (und geschrieben) hatte, ist mir dabei offenbar das Thema der cbo-Kosten weitgehend entgangen. Daher hier eine kurze Zusammenfassung dessen, was sich zum Thema in Cost Based Oracle (Chapter 8, S. 181ff.) findet:
  • bitmap Indizes sind in der Regel kleiner als entsprechende B*Tree Indizes und ihre Größe hängt stark von der Clusterung der Werte in der Tabelle ab (das entspricht schon mal den Ergebnissen meiner Tests)
  • num_rows entspricht für gut geclusterte Werte dem Wert für distinct_keys; für scattered values ist  er höher als distinct_keys
  • der clustering_factor für bitmap Indizes sagt nichts über die Clusterung der Daten aus und entspricht der num_rows-Angabe
  • die Kosten für Bitmap Indizes werden von der Clusterung der Daten kaum beeinflusst, da grundsätzlich die gleiche Arithmetik zur Kostenberechnung wie im Fall von B*Tree-Indizes angewandt wird (unter Verwendung des clustering_factors)
  • im Execution Plan werden für bitmap Indexes keine Kosten angegeben (gilt auch in 11.2)
  • Bitmap Indizes werden nur bis zu einem gewissen Punkt kombiniert: nämlich so lange, bis die Kosten des Scannens eines weiteren Indexes höher ist als die erwartete Reduzierung der Tabellenblockzugriffe. Deshalb werden selten mehr als 3 Bitmap Indizes kombiniert (und der oft erwähnte Gender-Bitmap-Index bliebe in einem solchen Fall leicht auf der Strecke)
  • insgesamt gibt's anscheinend eine Menge seltsamer Effekte beim Index-Costing, die keiner inneren Logik zu folgen scheinen
  • für 11.2 lieferten die zum cbo-Buch gehörenden Beispielskripte die gleichen Ergebnisse, die auch im Buch erscheinen: demnach scheint sich in diesem Bereich sehr wenig verändert zu haben.

Keine Kommentare:

Kommentar veröffentlichen