Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.misc -> Re: snowflake schema and index
Sorry Morgan, you are right of course. I am new to database development and
til yesterday i did not even know there is an explain plan...
so here the information:
when i set the indexes as shown below i get a full access on the table containing the attribute i use in the group by part. if i do not set and indexes, i get a full acces on the fact table and only on that.
statement:
(SELECT snowflake_dim_4.id, sum(wert)FROM dwh.snowflake_fakten, dwh.snowflake_dim_0,dwh.snowflake_dim_1,dwh.snowflake_dim_2,dwh.snowflake_di m_3,dwh.snowflake_dim_4 WHERE snowflake_fakten.dim_id = snowflake_dim_0.id AND snowflake_dim_0.ueber_id = snowflake_dim_1.id ANDsnowflake_dim_1.ueber_id = snowflake_dim_2.id AND snowflake_dim_2.ueber_id = snowflake_dim_3.id AND snowflake_dim_3.ueber_id = snowflake_dim_4.id GROUP BY snowflake_dim_4.id);
CREATE TABLE snowflake_dim_5(ID INTEGER PRIMARY KEY)
CREATE TABLE snowflake_dim_4(ID INTEGER PRIMARY KEY,UEBER_ID INTEGER
REFERENCES snowflake_dim_5(ID))
CREATE INDEX snowflake_dim_4_Index ON snowflake_dim_4(UEBER_ID)
CREATE TABLE snowflake_dim_3(ID INTEGER PRIMARY KEY,UEBER_ID INTEGER
REFERENCES snowflake_dim_4(ID))
CREATE INDEX snowflake_dim_3_Index ON snowflake_dim_3(UEBER_ID)
CREATE TABLE snowflake_dim_2(ID INTEGER PRIMARY KEY,UEBER_ID INTEGER
REFERENCES snowflake_dim_3(ID))
CREATE INDEX snowflake_dim_2_Index ON snowflake_dim_2(UEBER_ID)
CREATE TABLE snowflake_dim_1(ID INTEGER PRIMARY KEY,UEBER_ID INTEGER
REFERENCES snowflake_dim_2(ID))
CREATE INDEX snowflake_dim_1_Index ON snowflake_dim_1(UEBER_ID)
CREATE TABLE snowflake_dim_0(ID INTEGER PRIMARY KEY,UEBER_ID INTEGER
REFERENCES snowflake_dim_1(ID))
CREATE INDEX snowflake_dim_0_Index ON snowflake_dim_0(UEBER_ID)
CREATE TABLE star_fakten(DIM_ID INTEGER REFERENCES star_dim(dim_0_id), WERT
INTEGER)
CREATE INDEX snowflake_fakten_Index ON snowflake_fakten (DIM_ID)
0 SELECT STATEMENT Optimizer=CHOOSE 1 0 SORT (GROUP BY)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'SNOWFLAKE_FAKTEN' 3 2 NESTED LOOPS 4 3 NESTED LOOPS 5 4 NESTED LOOPS 6 5 NESTED LOOPS 7 6 NESTED LOOPS 8 7 TABLE ACCESS (FULL) OF 'SNOWFLAKE_DIM_4' 9 7 TABLE ACCESS (BY INDEX ROWID) OF 'SNOWFLAKE_ DIM_3' 10 9 INDEX (RANGE SCAN) OF 'SNOWFLAKE_DIM_3_IND EX' (NON-UNIQUE) 11 6 TABLE ACCESS (BY INDEX ROWID) OF 'SNOWFLAKE_DI M_2' 12 11 INDEX (RANGE SCAN) OF 'SNOWFLAKE_DIM_2_INDEX ' (NON-UNIQUE) 13 5 TABLE ACCESS (BY INDEX ROWID) OF 'SNOWFLAKE_DIM_ 1' 14 13 INDEX (RANGE SCAN) OF 'SNOWFLAKE_DIM_1_INDEX' (NON-UNIQUE) 15 4 TABLE ACCESS (BY INDEX ROWID) OF 'SNOWFLAKE_DIM_0' 16 15 INDEX (RANGE SCAN) OF 'SNOWFLAKE_DIM_0_INDEX' (N ON-UNIQUE) 17 3 INDEX (RANGE SCAN) OF 'SNOWFLAKE_FAKTEN_INDEX' (NON- UNIQUE)
without indexes:
CREATE TABLE snowflake_dim_5(ID INTEGER PRIMARY KEY)
CREATE TABLE snowflake_dim_4(ID INTEGER PRIMARY KEY,UEBER_ID INTEGER
REFERENCES snowflake_dim_5(ID))
CREATE TABLE snowflake_dim_3(ID INTEGER PRIMARY KEY,UEBER_ID INTEGER
REFERENCES snowflake_dim_4(ID))
CREATE TABLE snowflake_dim_2(ID INTEGER PRIMARY KEY,UEBER_ID INTEGER
REFERENCES snowflake_dim_3(ID))
CREATE TABLE snowflake_dim_1(ID INTEGER PRIMARY KEY,UEBER_ID INTEGER
REFERENCES snowflake_dim_2(ID))
CREATE TABLE snowflake_dim_0(ID INTEGER PRIMARY KEY,UEBER_ID INTEGER
REFERENCES snowflake_dim_1(ID))
CREATE TABLE snowflake_fakten(DIM_ID INTEGER REFERENCES snowflake_dim_0(ID),
WERT INTEGER)
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 SORT (GROUP BY)
2 1 NESTED LOOPS 3 2 NESTED LOOPS 4 3 NESTED LOOPS 5 4 NESTED LOOPS 6 5 NESTED LOOPS 7 6 TABLE ACCESS (FULL) OF 'SNOWFLAKE_FAKTEN' 8 6 TABLE ACCESS (BY INDEX ROWID) OF 'SNOWFLAKE_DI M_0' 9 8 INDEX (UNIQUE SCAN) OF 'SYS_C006699' (UNIQUE ) 10 5 TABLE ACCESS (BY INDEX ROWID) OF 'SNOWFLAKE_DIM_ 1' 11 10 INDEX (UNIQUE SCAN) OF 'SYS_C006697' (UNIQUE) 12 4 TABLE ACCESS (BY INDEX ROWID) OF 'SNOWFLAKE_DIM_2' 13 12 INDEX (UNIQUE SCAN) OF 'SYS_C006695' (UNIQUE) 14 3 TABLE ACCESS (BY INDEX ROWID) OF 'SNOWFLAKE_DIM_3' 15 14 INDEX (UNIQUE SCAN) OF 'SYS_C006693' (UNIQUE) 16 2 INDEX (UNIQUE SCAN) OF 'SYS_C006691' (UNIQUE)
Thanx for the help.
Stefan
Received on Sat Sep 20 2003 - 14:55:04 CDT