Database Reference
In-Depth Information
L.: „ Jetzt führen wir unseren Select aus.
SQL> with num as (select /*+ index(t1 i_t1) */
dbms_rowid.rowid_to_absolute_fno(rowid,'TEST1','T1') fno, dbms_rowid.rowid_block_number(rowid)
bno, rownum rn from test1.t1 where a is not null)
2 select sum(case when num1.fno=num2.fno and num1.bno=num2.bno then 0 else 1 end) + 1 cf
from num num1, num num2
3 where num1.rn = num2.rn + 1;
CF
----------
2100
P.: „ Bingo! Dein Select liefert denselben Wert.
L.: „ Dieser Select demonstriert, wie Oracle den CF berechnet, ist aber lediglich für Tests mit
relativ kleinen Tabellen geeignet. Peter, kannst Du jetzt die Werte von CF besser beurteilen?
P.: „ Lass mich probieren. Ein guter Wert muss nahe der Anzahl der Tabellenblöcke liegen.
Er kann sogar kleiner sein, weil der jeweilige Index keine Einträge mit NULL-Werten in den
Index-Spalten hat.
L.: „ Was meinst Du genau mit den NULL-Werten? Wenn der Index zusammengesetzt ist
und beispielsweise 3 Spalten hat, welche Indexeinträge sind es?
P.: „ Dieser Index enthält keine Datensätze, für welche alle 3 Spalten den NULL-Wert ha-
ben.
L.: „ Sehr gut, Peter. Was sagst Du über die schlechten Werte von CF?
P.: „ Der schlechte Wert kann der Anzahl der Indexsätze nahe sein. Im schlimmsten Fall ist
er gleich dieser Anzahl.
L.: „ OK, ich glaube, wir können unser Beispiel fortsetzen. Prüfen wir, wie viele Tabellen-
blockzugriffe über die ROWID bei dem Full Index Scan gemacht werden.
Search WWH ::




Custom Search