------------------------------------ ----------- ------------------------------
select col.table_name,col.constraint_name,col.column_name,con.constraint_type from user_cons_columns col,user_constraints con where col.constraint_name=con.constraint_name and constraint_type in ('P','R') and col.table_name in ('SALES','TIMES','CHANNELS','CUSTOMERS')
SH@PROD1>/
TABLE_NAME CONSTRAINT_NAME COLUMN_NAME C
------------ -------------------- ---------------- -
CUSTOMERS CUSTOMERS_PK CUST_ID P
CHANNELS CHANNELS_PK CHANNEL_ID P
TIMES TIMES_PK TIME_ID P
SALES SALES_CUSTOMER_FK CUST_ID R
SALES SALES_PRODUCT_FK PROD_ID R
SALES SALES_TIME_FK TIME_ID R
SALES SALES_CHANNEL_FK CHANNEL_ID R
SALES SALES_PROMO_FK PROMO_ID R
CUSTOMERS CUSTOMERS_COUNTRY_FK COUNTRY_ID R
9 rows selected.
4、为sales表外键建立位图索引
SH@PROD1>create bitmap index sales_time_bix on sales(time_id) local;
Index created.
SH@PROD1>create bitmap index sales_cust_bix on sales(cust_id) local;
Index created.
SH@PROD1>create bitmap index sales_channel_bix on sales(channel_id) local;
Index created.
5、收集统计信息
SH@PROD1>exec dbms_stats.gather_schema_stats('SH');
PL/SQL procedure successfully completed.
6、执行查询脚本,查看星型查询是否生效
SH@PROD1>set autot trace exp
SH@PROD1>@/home/oracle/star.sql
Execution Plan
----------------------------------------------------------
Plan hash value: 3070449514
----------------------------------------------------------------------------------------------------
-----------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU
)| Time | Pstart| Pstop |
----------------------------------------------------------------------------------------------------
-----------------------------
| 0 | SELECT STATEMENT | | 506 | 40986 | 600 (1
)| 00:00:08 | | |
| 1 | TEMP TABLE TRANSFORMATION | | ||
| | | |
| 2 | LOAD AS SELECT | SYS_TEMP_0FD9D6611_1218EB | ||
| | | |
|* 3 | TABLE ACCESS FULL | CUSTOMERS | 383 | 9958 | 406 (1
)| 00:00:05 | | |
| 4 | HASH GROUP BY | | 506 | 40986 | 194 (2
)| 00:00:03 | | |
|* 5 | HASH JOIN | | 506 | 40986 | 193 (2
)| 00:00:03 | | |
| 6 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6611_1218EB | 383 | 5745 | 2 (0
)| 00:00:01 | | |
|* 7 | HASH JOIN | | 506 | 33396 | 191 (2
)| 00:00:03 | | |
|* 8 | TABLE ACCESS FULL | CHANNELS | 2 | 42 | 3 (0
)| 00:00:01 | | |
|* 9 | HASH JOIN | | 506 | 22770 | 187 (1
)| 00:00:03 | | |
|* 10 | TABLE ACCESS FULL | TIMES | 365 | 5840 | 18 (0
)| 00:00:01 | | |
| 11 | VIEW | VW_ST_62EEF96F | 507 | 14703 | 169 (1
)| 00:00:03 | | |
| 12 | NESTED LOOPS | | 507 | 28899 | 146 (1
)| 00:00:02 | | |
| 13 | PARTITION RANGE SUBQUERY | | 506 | 14195 | 58 (2
)| 00:00:01 |KEY(SQ)|KEY(SQ)|
| 14 | BITMAP CONVERSION TO ROWIDS| | 506 | 14195 | 58 (2
)| 00:00:01 | | |
| 15 | BITMAP AND | | ||
| | | |
| 16 | BITMAP MERGE | | ||
| | | |
| 17 | BITMAP KEY ITERATION | | ||
| | | |
| 18 | BUFFER SORT | | ||
| | | |
|* 19 | TABLE ACCESS FULL | CHANNELS | 2 | 26 | 3 (0
)| 00:00:01 | | |
|* 20 | BITMAP INDEX RANGE SCAN| SALES_CHANNEL_BIX | ||
| |KEY(SQ)|KEY(SQ)|
| 21 | BITMAP MERGE | | ||
| | | |
| 22 | BITMAP KEY ITERATION | | ||
| | | |
| 23 | BUFFER SORT | | ||
| | | |
|* 24 | TABLE ACCESS FULL | TIMES | 365 | 5840 | 18 (0
)| 00:00:01 | | |
|* 25 | BITMAP INDEX RANGE SCAN| SALES_TIME_BIX | ||
| |KEY(SQ)|KEY(SQ)|
| 26 | BITMAP MERGE | | ||
| | | |
| 27 | BITMAP KEY ITERATION | | ||
| | | |
| 28 | BUFFER SORT | | ||
| | | |
| 29 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6611_1218EB | 383 | 1915 | 2 (0
)| 00:00:01 | | |
|* 30 | BITMAP INDEX RANGE SCAN| SALES_CUST_BIX | ||
| |KEY(SQ)|KEY(SQ)|
| 31 | TABLE ACCESS BY USER ROWID | SALES | 1 | 29 | 111 (1
)| 00:00:02 | ROWID | ROWID |
----------------------------------------------------------------------------------------------------
-----------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - filter("C"."CUST_STATE_PROVINCE"='CA')
5 - access("ITEM_2"="C0")
7 - access("ITEM_1"="CH"."CHANNEL_ID")
8 - filter("CH"."CHANNEL_DESC"='Catalog' OR "CH"."CHANNEL_DESC"='Internet')
9 - access("ITEM_3"="T"."TIME_ID")
10 - filter("T"."CALENDAR_QUARTER_DESC"='1999-01' OR "T"."CALENDAR_QUARTER_DESC"='1999-02' OR
"T"."CALENDAR_QUARTER_DESC"='2000-03' OR "T"."CALENDAR_QUARTER_DESC"='2000-04')
19 - filter("CH"."CHANNEL_DESC"='Catalog' OR "CH"."CHANNEL_DESC"='Internet')
20 - access("S"."CHANNEL_ID"="CH"."CHANNEL_ID")
24 - filter("T"."CALENDAR_QUARTER_DESC"='1999-01' OR "T"."CALENDAR_QUARTER_DESC"='1999-02' OR
"T"."CALENDAR_QUARTER_DESC"='2000-03' OR "T"."CALENDAR_QUARTER_DESC"='2000-04')
25 - access("S"."TIME_ID"="T"."TIME_ID")
30 - access("S"."CUST_ID"="C0")
Note
-----
- star transformation used for this statement
SH@PROD1>