Hallo:
ich habe gelesen, dass ab ORACLE9i bei einem Composite Index der Index auch genommen wird, wenn im WHERE nur z.B. Column3 vorkommt (Index-Skip-Scan ).
Nach meinem Test sind mir allerdings einige Dinge unklahr.
Ich habe eine Tabelle „BDU“ mit einem Index „IDX_NOMBRE_COM“.
INDEX_NAME TABLE_NAME COLUMN_NAME COLUMN_POSITION
IDX_NOMBRE_COM BDU NOMBRE 1
IDX_NOMBRE_COM BDU APELLIDO1 2
IDX_NOMBRE_COM BDU APELLIDO2 3
In meiner 1.Abfrage nimmt er meinen Index, obwohl ich nur das 3.Feld im WHERE habe (was ja neu sein soll). Selektioniert wird das Feld „NOMBRE“, das im Index enthalten ist.
SQL> explain plan for select nombre from bdu where apellido2=‚ZAPATERO‘;
TIMESTAMP OPERATION OPTIONS OBJECT_OWNER OBJECT_NAME OBJECT_TYPE OPTIMIZER ID
23/08/2005 15:51:02 SELECT STATEMENT 0
23/08/2005 15:51:02 INDEX FAST FULL SCAN BDU IDX_NOMBRE_COM NON-UNIQUE ANALYZED 1
Wenn ich aber nun ein „select *“ oder ein Feld selektioniere, das nicht im Index enthalten ist, macht er mir einen FULL TABLE SCAN.
SQL> explain plan for select * from bdu where apellido2=‚ZAPATERO‘;
TIMESTAMP OPERATION OPTIONS OBJECT_OWNER OBJECT_NAME OBJECT_TYPE OPTIMIZER ID
23/08/2005 16:14:07 SELECT STATEMENT CHOOSE 0
23/08/2005 16:14:07 TABLE ACCESS FULL BDU BDU ANALYZED 1
Warum?
Warum geht er nicht über den Index und holt sich danach die Restdaten über Rowid?
Habe ich da etwas falsch verstanden?
Die Tabelle enthält 9,8 Millionen Datensätze.
viele Grüsse
Regine