Hallo,
ich teste gerade die Performance einer Datenbank.
Es wurden 2 Tabellen angelegt:
Auf den ID Spalten der beiden Tabellen liegen Indizes. Ausserdem noch ein Bitmap-Index auf BEJA.
Jetzt mache ich folgende Abfrage:
Als Errgebnis kommt:
Kann mir vielleicht bitte jemand sagen, wieso er einen FullTableScan macht und nicht auf die Indizes geht? Zumindest der Join über beide Tabellen sollte doch über die Indizes gehen?
Vielen Dank
Grüße
Heidi
ich teste gerade die Performance einer Datenbank.
Es wurden 2 Tabellen angelegt:
Code:
CREATE TABLE "BI"."RHKC_2007_KO_KLEIN"
( "ID" NUMBER(18,0) NOT NULL ENABLE,
"KENR13" NUMBER(1,0),
"BRNR" NUMBER(2,0),
"BEJA" NUMBER(4,0)
)
CREATE INDEX "BI"."RHKC_2007_IDX4" ON "BI"."RHKC_2007_KO_KLEIN" ("BEJA")
CREATE UNIQUE INDEX "BI"."PK_KLEIN_KO_ID" ON "BI"."RHKC_2007_KO_KLEIN" ("ID")
Code:
CREATE TABLE "BI"."RHKC_2007_MC_KLEIN"
( "ID" NUMBER(18,0) NOT NULL ENABLE,
"BRNR" NUMBER(2,0),
"PSGRAL" NUMBER(1,0),
"PSGRSO" NUMBER(1,0)
)
CREATE INDEX "BI"."IDX_RHKC2007MC_ID" ON "BI"."RHKC_2007_MC_KLEIN" ("ID")
Auf den ID Spalten der beiden Tabellen liegen Indizes. Ausserdem noch ein Bitmap-Index auf BEJA.
Jetzt mache ich folgende Abfrage:
Code:
delete plan_table;
explain plan
set statement_id = 'MY_STATE'
for
select * from rhkc_2007_ko_klein a, rhkc_2007_mc_klein b where beja = 2007 and a.id = b.id
select lpad(' ',2*level)||OPERATION||' '||OPTIONS||' '||OBJECT_NAME QUERY_PLAN
from PLAN_TABLE WHERE STATEMENT_ID = 'MY_STATE'
connect by prior id = PARENT_ID AND STATEMENT_ID = 'MY_STATE'
start with id = 1;
Als Errgebnis kommt:
Code:
PX COORDINATOR
PX SEND QC (RANDOM) :TQ10001
HASH JOIN
PX RECEIVE
PX SEND BROADCAST LOCAL :TQ10000
PX BLOCK ITERATOR
TABLE ACCESS FULL RHKC_2007_KO_KLEIN
PX BLOCK ITERATOR
TABLE ACCESS FULL RHKC_2007_MC_KLEIN
Kann mir vielleicht bitte jemand sagen, wieso er einen FullTableScan macht und nicht auf die Indizes geht? Zumindest der Join über beide Tabellen sollte doch über die Indizes gehen?
Vielen Dank
Grüße
Heidi