表结构分别为:
create table TMP_TB2033
(
REL_INSUR_CLM_THRD VARCHAR2(20),
COVER_ID VARCHAR2(10),
POLICY_NO VARCHAR2(30),
PRODUCT_ID VARCHAR2(20),
CASE_REG_NO VARCHAR2(20),
COVER_CLAIM_NO VARCHAR2(20),
COMPANY_NO VARCHAR2(20),
CREATE_SYSTEM_ID VARCHAR2(10)
);
create index IND_TMP_TB2033_1 on TMP_TB2033 (COVER_CLAIM_NO, COMPANY_NO);
create table TB2033
(
INSUR_CLAIM_ID CHAR(20) not null,
SEQ_NO NUMBER not null,
COVER_CLAIM_NO VARCHAR2(30),
COMPANY_NO VARCHAR2(30),
COVER_CLAIM_STAT VARCHAR2(30),
COVER_CLAIM_STAT_DATE DATE,
TOT_PAID NUMBER(16,2),
TOT_PAID_CRNCY CHAR(10),
COVER_CLAIM_AMT NUMBER(16,2),
COVER_CLAIM_AMT_CRNCY CHAR(10) default '1070010001',
COVER_CLAIM_DESC VARCHAR2(900),
COVER_ID VARCHAR2(15),
REL_INSUR_CLM_THRD CHAR(20),
CASE_REG_DATE DATE,
COVER_TYPE CHAR(10),
POLICY_NO VARCHAR2(45),
PRODUCT_ID VARCHAR2(30),
CLAIM_SEQ NUMBER,
EXT_EVE_REF VARCHAR2(45),
EXT_SYSTEM_ID CHAR(10),
CREATED_TS TIMESTAMP(6) not null,
UPDATED_TS TIMESTAMP(6) not null,
CREATE_SYSTEM_ID CHAR(10) not null,
UPDATE_SYSTEM_ID CHAR(10) not null,
SRC_CRTD_TS TIMESTAMP(6),
SRC_UPTD_TS TIMESTAMP(6),
BRANCH_ID VARCHAR2(20)
);
alter table TB2033
add primary key (INSUR_CLAIM_ID);
create unique index IND_2033_1 on TB2033 (INSUR_CLAIM_ID);
create index IND_2033_2 on TB2033 (COVER_CLAIM_NO, COMPANY_NO);
create index IND_2033_3 on TB2033 (REL_INSUR_CLM_THRD)
查询语句为:
SELECT
A.COVER_CLAIM_NO,A.COMPANY_NO,A.INSUR_CLAIM_ID,A.SEQ_NO, TO_CHAR(A.SRC_CRTD_TS,'YYYY-MM-DD HH24:MI:SS') SRC_CRTD_TS
FROM
TB2033 A, TMP_TB2033 B
WHERE A.CREATE_SYSTEM_ID='0300530005'
AND B.CREATE_SYSTEM_ID='0300530005'
AND A.COVER_CLAIM_NO=B.COVER_CLAIM_NO
AND A.COMPANY_NO=B.COMPANY_NO
求助:怎么样才能用到索引啊?TMP_TB2033的索引可以修改

最新回复
mylife920 (2008-6-27 21:38:37)
A.COVER_CLAIM_NO=B.COVER_CLAIM_NO;不知道我说得是否正确,请大家回复!
valenwon (2008-6-28 14:56:56)
pepsirjl 你应该贴出执行计划
然后告诉大家,你希望用 那个索引 ,而却没有用到
能告诉大概的数据量,哪个是驱动表就更好了
pepsirjl (2008-6-30 09:46:14)
------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
--------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 203 | 18879 | 477 |
|* 1 | HASH JOIN | | 203 | 18879 | 477 |
|* 2 | TABLE ACCESS FULL | TMP_TB2033 | 405 | 12555 | 49 |
|* 3 | TABLE ACCESS FULL | TB2033 | 39596 | 2397K| 426 |
--------------------------------------------------------------------
Predicate Information (identified by operation id):
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
1 - access("A"."COVER_CLAIM_NO"="B"."COVER_CLAIM_NO" AND
"A"."COMPANY_NO"="B"."COMPANY_NO")
2 - filter("B"."CREATE_SYSTEM_ID"='0300530005')
3 - filter("A"."CREATE_SYSTEM_ID"='0300530005')
大家帮我看看,现在为什么两个表用的是全表扫描,谢谢
valenwon (2008-6-30 20:19:32)
B 表被hash 到内存中,然后scan A 表做比较
AND A.COVER_CLAIM_NO=B.COVER_CLAIM_NO
AND A.COMPANY_NO=B.COMPANY_NO
被用于做probe了
只有A.CREATE_SYSTEM_ID='0300530005'
用于做数据扫描
所以你利用不到IND_2033_2 on TB2033 (COVER_CLAIM_NO, COMPANY_NO);
pepsirjl (2008-7-01 17:09:53)