Dienstag, März 22, 2011

Index Costing

Als Erinnerungsstütze: der cbo berechnet die Kosten eines Index Zugriffs als:
cost = blevel 
     + ceiling(leaf_blocks * effective index selectivity)
     + ceiling(clustering_factor * effective table selectivity)  

Anders ausgedrückt: Höhe des Index + Kosten des Index-Zugriffs + Kosten des Tabellenzugriffs. Dabei gilt:
  • effective index selectivity: ix_sel im 10053er Trace; basiert nur auf der Selektivität jener Index-Spalten, die für den Zugriff tatsächlich genutzt werden können (nur access Prädikate, verwendete führende Spalten im Index): "which may have to use a subset of the predicates based on the index's leading columns" (Jonathan Lewis, Cost-Based Oracle Kapitel 4, S. 74). Dies repräsentiert die Folge von Leaf Blocks, die in der Index-Struktur gelesen werden.
  • effective table selectivity: ix_sel_with_filters im 10053er Trace; Multiplikation der Selektivität der Einzelspalten des Index (access + filter Prädikate): "combines all predicates available on the index's columns" (Jonathan Lewis, Cost-Based Oracle Kapitel 4, S. 74). Das ist die Repräsentation der Tabellenblockzugriffe, die über den Index erfolgen (weitere Filterprädikate schränken das Ergebnis dann ggf. weiter ein, was aber für das Costing nicht relevant ist, da die entsprechenden Blocks zunächst gelesen werden müssen)
Alles nachzulesen bei Jonathan Lewis in Cost-Based Oracle Kapitel 4, S. 62ff.

Keine Kommentare:

Kommentar veröffentlichen