SQL 语句:
SELECT t.CSTM_NO,t.acc
CM.CUSTMER_MANAGER_ID
FROM MPM_PCUST_MNG_INFO CM,
MPM_PACC_INFO t
WHERE CM.CUSTMER_MANAGER_ID = '330118065'
AND CM.CONFORM_INDPARTY_ID = t.CSTM_NO;
索引 :
MPM_PCUST_MNG_INFO表:
alter table MPM_PCUST_MNG_INFO add constraint PCUST_MNG_INFO primary key (CONFORM_INDPARTY_ID, CUSTMER_MANAGER_ID)
MPM_PACC_INFO 表:
create index PACC_CSTM_NO_IDX on MPM_PACC_INFO (CSTM_NO, ACC_TYPE, OPEN_INST) 。
得到的执行计划如下:
SELECT STATEMENT, GOAL = ALL_ROWS 411842 9 468
HASH JOIN 411842 9 468
INDEX FULL SCAN MPM PCUST_MNG_INFO 1 4 68
PARTITION RANGE ALL 411243 66416252 2324568820
TABLE ACCESS FULL MPM MPM_PACC_INFO 411243 66416252 2324568820MPM_PCUST_MNG_INFO表数据量100多条,关联CM.CUSTMER_MANAGER_ID = '330118065'条件后只有2条记录,MPM_PACC_INFO表有6600多万记录,而且经过分区的。
还请CSDN各位大侠解答,为什么MPM_PACC_INFO表没有走PACC_CSTM_NO_IDX这个索引,在另外的测试环境上,MPM_PACC_INFO记录只有200多万的时候是能够走索引的。
SELECT t.CSTM_NO,t.acc
CM.CUSTMER_MANAGER_ID
FROM MPM_PCUST_MNG_INFO CM,
MPM_PACC_INFO t
WHERE CM.CUSTMER_MANAGER_ID = '330118065'
AND CM.CONFORM_INDPARTY_ID = t.CSTM_NO;
索引 :
MPM_PCUST_MNG_INFO表:
alter table MPM_PCUST_MNG_INFO add constraint PCUST_MNG_INFO primary key (CONFORM_INDPARTY_ID, CUSTMER_MANAGER_ID)
MPM_PACC_INFO 表:
create index PACC_CSTM_NO_IDX on MPM_PACC_INFO (CSTM_NO, ACC_TYPE, OPEN_INST) 。
得到的执行计划如下:
SELECT STATEMENT, GOAL = ALL_ROWS 411842 9 468
HASH JOIN 411842 9 468
INDEX FULL SCAN MPM PCUST_MNG_INFO 1 4 68
PARTITION RANGE ALL 411243 66416252 2324568820
TABLE ACCESS FULL MPM MPM_PACC_INFO 411243 66416252 2324568820MPM_PCUST_MNG_INFO表数据量100多条,关联CM.CUSTMER_MANAGER_ID = '330118065'条件后只有2条记录,MPM_PACC_INFO表有6600多万记录,而且经过分区的。
还请CSDN各位大侠解答,为什么MPM_PACC_INFO表没有走PACC_CSTM_NO_IDX这个索引,在另外的测试环境上,MPM_PACC_INFO记录只有200多万的时候是能够走索引的。
--------------------------------------
where 条件没有PACC_CSTM_NO_IDX列。怎么走、
查询结果小于10条,而原表MPM_PACC_INFO有6600万数据。
使用普通的查询和使用hint强制走索引看看两个执行计划。
如果看到普通查询消耗的资源少那么看看表的碎片是不是太多了,再看看索引的层级。
如果看到普通查询消耗的资源多,那么看一下表是否太长时间没有收集过统计信息。
=======================
如果分析后依然不能获得很好效果,你可以重写一下语句
SELECT t.CSTM_NO,t.acc
'330118065' CUSTMER_MANAGER_ID
FROM MPM_PACC_INFO t
where t.cstm_no in (select cm.CONFORM_INDPARTY_ID from MPM_PCUST_MNG_INFO CM
where cm.CUSTMER_MANAGER_ID='330118065')====================================
或者加些提示
======================
当然,也可能是你的PACC_CSTM_NO_IDX 情况太差,这个索引即使用上也是