Serge Shmygelskyy, June 24, 2010 - 3:07 pm UTC
Dear Tom,
sorry, I thought it wouldn't be good to put 'create table' with more than 80 columns. But here it goes:
CREATE TABLE "RATEPLAN"
( "TMCODE" NUMBER(*,0) NOT NULL ENABLE,
"DES" VARCHAR2(30) NOT NULL ENABLE,
"SHDES" VARCHAR2(5) NOT NULL ENABLE,
"TMGLOBAL" CHAR(1) DEFAULT 'N' NOT NULL ENABLE,
"REC_VERSION" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,
"PRERATED_TAP_RP_IND" VARCHAR2(1) NOT NULL ENABLE,
"EXTRNL_RATEPLAN_ID" NUMBER(*,0),
"PDE_RATEPLAN" VARCHAR2(1),
"PROVISION_EXT" CHAR(1),
"IMPORT_EXPORT_FLAG" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,
"SPECIAL_USAGE_IND" CHAR(1),
"SERVICE_MIX_TYPE" NUMBER(*,0) NOT NULL ENABLE,
"OFFRE_ENTERPRISE_IND" CHAR(1),
CONSTRAINT "PK_RATEPLAN" PRIMARY KEY ("TMCODE")
)
/
CREATE TABLE "CONTRACT_ALL"
( "CO_ID" NUMBER(*,0) NOT NULL ENABLE,
"CUSTOMER_ID" NUMBER(*,0) NOT NULL ENABLE,
"TYPE" VARCHAR2(1),
"PLCODE" NUMBER(*,0),
"SCCODE" NUMBER(*,0),
"SUBM_ID" NUMBER(*,0),
"CO_SIGNED" DATE,
"CO_EQU_TYPE" VARCHAR2(20),
"CO_REP_BILL" VARCHAR2(40),
"CO_REP" VARCHAR2(40),
"CO_REP_BILL_IDNO" VARCHAR2(30),
"CO_REP_IDNO" VARCHAR2(30),
"CO_INSTALLED" DATE,
"CO_ARCHIVE" VARCHAR2(1),
"CO_DIR_ENTRY" VARCHAR2(1),
"CO_OPERATOR_DIR" VARCHAR2(1),
"CO_PSTN_DIR" VARCHAR2(1),
"CO_ASS_SERV" VARCHAR2(1),
"CO_ASS_EQU" VARCHAR2(1),
"CO_CRD_CHECK" VARCHAR2(1),
"CO_CRD_CHK_END" DATE,
"CO_CRD_CHK_START" DATE,
"CO_CRD_CLICKS" NUMBER(*,0),
"CO_CRD_CLICKS_DAY" NUMBER(*,0),
"CO_CRD_DAYS" NUMBER(*,0),
"CO_COMMENT" VARCHAR2(60),
"CO_RESERVED" DATE,
"CO_EXPIR_DATE" DATE,
"CO_ACTIVATED" DATE,
"CO_ENTDATE" DATE NOT NULL ENABLE,
"CO_MODDATE" DATE,
"CO_USERLASTMOD" VARCHAR2(16),
"TMCODE" NUMBER(*,0),
"TMCODE_DATE" DATE,
"CO_CRD_D_TR1" NUMBER(*,0),
"CO_CRD_D_TR2" NUMBER(*,0),
"CO_CRD_D_TR3" NUMBER(*,0),
"CO_CRD_P_TR1" NUMBER(*,0),
"CO_CRD_P_TR2" NUMBER(*,0),
"CO_CRD_P_TR3" NUMBER(*,0),
"ECCODE_LDC" NUMBER(*,0),
"PENDING_ECCODE_LDC" NUMBER(*,0),
"ECCODE_LEC" NUMBER(*,0),
"PENDING_ECCODE_LEC" NUMBER(*,0),
"CO_REQUEST" NUMBER(*,0),
"DEALER_ID" NUMBER(*,0),
"NOT_VALID" VARCHAR2(1),
"ARPCODE" NUMBER(*,0),
"CO_ADDR_ON_IBILL" VARCHAR2(1),
"CO_CRD_AMOUNT" FLOAT(126),
"CO_CRD_AMOUNT_DAY" FLOAT(126),
"PRODUCT_HISTORY_DATE" DATE,
"CO_CONFIRM" VARCHAR2(1),
"CO_EXT_CSUIN" VARCHAR2(50),
"TRIAL_END_DATE" DATE,
"CO_IB_CDR_FLAG" VARCHAR2(1),
"CURRENCY" NUMBER(*,0),
"REC_VERSION" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE,
"AN_PACKAGE_ID" NUMBER(*,0),
"CO_REL_TYPE" VARCHAR2(1),
"PENDING_TMCODE" NUMBER(*,0),
"CONTRACT_TEMPLATE" VARCHAR2(1),
"CO_CODE" VARCHAR2(30) NOT NULL ENABLE,
"BUSINESS_UNIT_ID" NUMBER(*,0) NOT NULL ENABLE,
"DESCRIPTION" VARCHAR2(100),
"AGREEMENT_TYPE" VARCHAR2(2),
"EXT_PRODUCT_ID" NUMBER(*,0),
"REMOTE_PLCODE" NUMBER(*,0),
"ECCODE" NUMBER(*,0),
"HPLMN_BID_GROUP_ID" NUMBER(*,0),
"VPLMN_BID_GROUP_ID" NUMBER(*,0),
"HOME_PARTY_ID" NUMBER(*,0) NOT NULL ENABLE,
"CONTRACT_TYPE_ID" NUMBER(*,0) NOT NULL ENABLE,
"TRIAL_START_DATE" DATE,
"FOH_AGGREGATION_FLAG" CHAR(1),
"GL_ACC_PACK_ID" NUMBER(*,0),
"CDS_BILL_MEDIUM" NUMBER(*,0) DEFAULT 1 NOT NULL ENABLE,
"CDS_GENERATION" CHAR(1),
"CHARGE_PART_NUM" NUMBER(*,0),
"CH_STATUS" CHAR(1) DEFAULT 'o',
"SVP_FILE" VARCHAR2(5),
"CH_STATUS_VALIDFROM" DATE,
"OFFRE_ENTERPRISE_IND" CHAR(1),
CONSTRAINT "PKCONTRACT_ALL" PRIMARY KEY ("CO_ID"),
CONSTRAINT "FK_CONTRALL_RATEPL" FOREIGN KEY ("TMCODE")
REFERENCES "RATEPLAN" ("TMCODE")
)
/
sql> exec dbms_stats.set_table_stats(user, 'CONTRACT_ALL', numrows=>28144031, numblks=>760749, AVGRLEN=>165);
sql> exec dbms_stats.set_table_stats(user, 'RATEPLAN', numrows=>38, numblks=>4, AVGRLEN=>41);
sql> create bitmap index shmyg_idx on contract_all(rateplan.service_mix_type) from contract_all, rateplan where rateplan.tmcode = contract_all.tmcode;
sql> explain plan for select co_id from contract_all ca, rateplan rt where rt.tmcode = ca.tmcode and rt.service_mix_type = 2;
sql> @p
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 1218489720
-----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 281K| 13M| 92325 (24)| 00:02:17 |
|* 1 | HASH JOIN | | 281K| 13M| 92325 (24)| 00:02:17 |
|* 2 | TABLE ACCESS FULL| RATEPLAN | 1 | 26 | 2 (0)| 00:00:01 |
| 3 | TABLE ACCESS FULL| CONTRACT_ALL | 28M| 697M| 90345 (22)| 00:02:14 |
-----------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("RT"."TMCODE"="CA"."TMCODE")
2 - filter("RT"."SERVICE_MIX_TYPE"=2)
sql> explain plan for select co_id from contract_all ca, rateplan rt where rt.tmcode = ca.tmcode and rt.service_mix_type = 1;
sql> @p
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 1218489720
-----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 281K| 13M| 92325 (24)| 00:02:17 |
|* 1 | HASH JOIN | | 281K| 13M| 92325 (24)| 00:02:17 |
|* 2 | TABLE ACCESS FULL| RATEPLAN | 1 | 26 | 2 (0)| 00:00:01 |
| 3 | TABLE ACCESS FULL| CONTRACT_ALL | 28M| 697M| 90345 (22)| 00:02:14 |
-----------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("RT"."TMCODE"="CA"."TMCODE")
2 - filter("RT"."SERVICE_MIX_TYPE"=1)
sql> explain plan for select count(co_id) from contract_all ca, rateplan rt where rt.tmcode = ca.tmcode and rt.service_mix_type = 1;
sql> @p
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 1855272813
-----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 13 | 1 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 13 | | |
| 2 | BITMAP CONVERSION COUNT | | 281K| 3572K| 1 (0)| 00:00:01 |
|* 3 | BITMAP INDEX SINGLE VALUE| SHMYG_IDX | | | | |
-----------------------------------------------------------------------------------------
sql> explain plan for select ca.* from contract_all ca, rateplan rt where rt.tmcode = ca.tmcode and rt.service_mix_type = 1;
sql> @p
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 444702056
---------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 281K| 44M| 106K (1)| 00:02:37 |
| 1 | TABLE ACCESS BY INDEX ROWID | CONTRACT_ALL | 281K| 44M| 106K (1)| 00:02:37 |
| 2 | BITMAP CONVERSION TO ROWIDS| | | | | |
|* 3 | BITMAP INDEX SINGLE VALUE | SHMYG_IDX | | | | |
---------------------------------------------------------------------------------------------
Oracle version is 10.2.0.4
July 06, 2010 - 9:55 am UTC
I thought it wouldn't be good to put 'create table' with more than 80
columns.you were correct - it wouldn't be. Especially since you need maybe 5 columns in each table to demonstrate with?????????
do you see the estimated cardinalities there?
I'll still need a bit of help, on 10.2.0.4 with your test case so far, I observe:
ops$tkyte%ORA10GR2> exec dbms_stats.set_table_stats(user, 'CONTRACT_ALL', numrows=>28144031, numblks=>760749, AVGRLEN=>165);
PL/SQL procedure successfully completed.
ops$tkyte%ORA10GR2>
ops$tkyte%ORA10GR2> exec dbms_stats.set_table_stats(user, 'RATEPLAN', numrows=>38, numblks=>4, AVGRLEN=>41);
PL/SQL procedure successfully completed.
ops$tkyte%ORA10GR2>
ops$tkyte%ORA10GR2> create bitmap index shmyg_idx on contract_all(rateplan.service_mix_type) from contract_all, rateplan where rateplan.tmcode = contract_all.tmcode;
Index created.
ops$tkyte%ORA10GR2>
ops$tkyte%ORA10GR2> set autotrace traceonly explain
ops$tkyte%ORA10GR2> select co_id from contract_all ca, rateplan rt where rt.tmcode = ca.tmcode and rt.service_mix_type = 2;
Execution Plan
----------------------------------------------------------
Plan hash value: 3893157349
---------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 281K| 7145K| 49973 (1)| 00:06:08 |
| 1 | TABLE ACCESS BY INDEX ROWID | CONTRACT_ALL | 281K| 7145K| 49973 (1)| 00:06:08 |
| 2 | BITMAP CONVERSION TO ROWIDS| | | | | |
|* 3 | BITMAP INDEX SINGLE VALUE | SHMYG_IDX | | | | |
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("CA"."SYS_NC00084$"=2)
ops$tkyte%ORA10GR2> select co_id from contract_all ca, rateplan rt where rt.tmcode = ca.tmcode and rt.service_mix_type = 1;
Execution Plan
----------------------------------------------------------
Plan hash value: 3893157349
---------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 281K| 7145K| 49973 (1)| 00:06:08 |
| 1 | TABLE ACCESS BY INDEX ROWID | CONTRACT_ALL | 281K| 7145K| 49973 (1)| 00:06:08 |
| 2 | BITMAP CONVERSION TO ROWIDS| | | | | |
|* 3 | BITMAP INDEX SINGLE VALUE | SHMYG_IDX | | | | |
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("CA"."SYS_NC00084$"=1)
ops$tkyte%ORA10GR2> select count(co_id) from contract_all ca, rateplan rt where rt.tmcode = ca.tmcode and rt.service_mix_type = 1;
Execution Plan
----------------------------------------------------------
Plan hash value: 3625186868
-----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 13 | 1 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 13 | | |
| 2 | BITMAP CONVERSION COUNT | | 281K| 3572K| 1 (0)| 00:00:01 |
|* 3 | BITMAP INDEX SINGLE VALUE| SHMYG_IDX | | | | |
-----------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("CA"."SYS_NC00084$"=1)
ops$tkyte%ORA10GR2> select ca.* from contract_all ca, rateplan rt where rt.tmcode = ca.tmcode and rt.service_mix_type = 1;
Execution Plan
----------------------------------------------------------
Plan hash value: 3893157349
---------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 281K| 44M| 49998 (1)| 00:06:09 |
| 1 | TABLE ACCESS BY INDEX ROWID | CONTRACT_ALL | 281K| 44M| 49998 (1)| 00:06:09 |
| 2 | BITMAP CONVERSION TO ROWIDS| | | | | |
|* 3 | BITMAP INDEX SINGLE VALUE | SHMYG_IDX | | | | |
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("CA"."SYS_NC00084$"=1)