Hallo zusammen !
Habe folgendes Problem:
Arbeite mit einer ORACLE-Datenbank der Version 10.2.0.1.0
Die Tabelle T_TR_XYZ hat mehrere Indices,
darunter auch den Index I_TR_3
der sich auf die Spalte TR_SID (vom Typ: NUMBER - NOT NULL) bezieht.
SQL> select INDEX_NAME, INDEX_TYPE, UNIQUENESS, COMPRESSION, INITIAL_EXTENT,
NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS,BLEVEL,LEAF_BL OCKS,DISTINCT_KEYS
from all_indexes where index_name = 'I_TR_3';
INDEX_NAME INDEX_TYPE UNIQUENES COMPRESS INITIAL_EXTENT
MIN_EXTENTS MAX_EXTENTS BLEVEL LEAF_BLOCKS DISTINCT_KEYS
------------------------------------------------------------------------
I_TR_3 NORMAL NONUNIQUE DISABLED 65536
1 2147483645 2 13579 683123
Die Tabelle T_TR_XYZ hat 6788690 Sätze.
SQL> select count(*) from T_TR_XYZ ;
COUNT(*)
----------
6788690
Wobei es nur 2251504 Sätze mit gefülltem TR_SID gibt !
SQL> select count(*) from T_TR_XYZ where TR_SID > 0;
COUNT(*)
----------
2251504
Vielleicht auch interessant:
Die Inhalte des Feldes TR_SID sind entweder 8- oder 9-stellig.
SQL> select length(TR_SID), count(*) from T_TR_XYZ
group by length (TR_SID);
LENGTH(TR_SID) COUNT(*)
-------------- ----------
1 4537186
8 2078135
9 173368
Und jetzt zu meiner Frage:
Bei einer gezielten Suche nach einer TR_SID hängt es davon ab,
wie groß die Zahl ist, nach der gesucht wird, ob der Index wirkt, oder nicht ?!?!?
select * from T_TR_XYZ where TR_SID = 1234;
SELECT STATEMENT, GOAL = ALL_ROWS
TABLE ACCESS FULL RNVS T_TR_XYZ
select * from T_TR_XYZ where TR_SID = 123456789;
SELECT STATEMENT, GOAL = ALL_ROWS
TABLE ACCESS FULL RNVS T_TR_XYZ
Erst ab einer Länge von 10 Stellen beginnt der Index zu wirken !
select * from T_TR_XYZ where TR_SID = 1234567890;
SELECT STATEMENT, GOAL = ALL_ROWS
TABLE ACCESS BY INDEX ROWID RNVS T_TR_XYZ
INDEX RANGE SCAN RNVS I_TR_3
Zu guter Letzt sei noch erwähnt, dass auf einer zweiten Test-Datenbank
mit identer Tabellen- und Indexstruktur
und fast identen Tabelleninhalten, dieses Phänomen nicht auftritt !
Kann mir jemand helfen ?????
Habe folgendes Problem:
Arbeite mit einer ORACLE-Datenbank der Version 10.2.0.1.0
Die Tabelle T_TR_XYZ hat mehrere Indices,
darunter auch den Index I_TR_3
der sich auf die Spalte TR_SID (vom Typ: NUMBER - NOT NULL) bezieht.
SQL> select INDEX_NAME, INDEX_TYPE, UNIQUENESS, COMPRESSION, INITIAL_EXTENT,
NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS,BLEVEL,LEAF_BL OCKS,DISTINCT_KEYS
from all_indexes where index_name = 'I_TR_3';
INDEX_NAME INDEX_TYPE UNIQUENES COMPRESS INITIAL_EXTENT
MIN_EXTENTS MAX_EXTENTS BLEVEL LEAF_BLOCKS DISTINCT_KEYS
------------------------------------------------------------------------
I_TR_3 NORMAL NONUNIQUE DISABLED 65536
1 2147483645 2 13579 683123
Die Tabelle T_TR_XYZ hat 6788690 Sätze.
SQL> select count(*) from T_TR_XYZ ;
COUNT(*)
----------
6788690
Wobei es nur 2251504 Sätze mit gefülltem TR_SID gibt !
SQL> select count(*) from T_TR_XYZ where TR_SID > 0;
COUNT(*)
----------
2251504
Vielleicht auch interessant:
Die Inhalte des Feldes TR_SID sind entweder 8- oder 9-stellig.
SQL> select length(TR_SID), count(*) from T_TR_XYZ
group by length (TR_SID);
LENGTH(TR_SID) COUNT(*)
-------------- ----------
1 4537186
8 2078135
9 173368
Und jetzt zu meiner Frage:
Bei einer gezielten Suche nach einer TR_SID hängt es davon ab,
wie groß die Zahl ist, nach der gesucht wird, ob der Index wirkt, oder nicht ?!?!?
select * from T_TR_XYZ where TR_SID = 1234;
SELECT STATEMENT, GOAL = ALL_ROWS
TABLE ACCESS FULL RNVS T_TR_XYZ
select * from T_TR_XYZ where TR_SID = 123456789;
SELECT STATEMENT, GOAL = ALL_ROWS
TABLE ACCESS FULL RNVS T_TR_XYZ
Erst ab einer Länge von 10 Stellen beginnt der Index zu wirken !
select * from T_TR_XYZ where TR_SID = 1234567890;
SELECT STATEMENT, GOAL = ALL_ROWS
TABLE ACCESS BY INDEX ROWID RNVS T_TR_XYZ
INDEX RANGE SCAN RNVS I_TR_3
Zu guter Letzt sei noch erwähnt, dass auf einer zweiten Test-Datenbank
mit identer Tabellen- und Indexstruktur
und fast identen Tabelleninhalten, dieses Phänomen nicht auftritt !
Kann mir jemand helfen ?????
Comment