db:8.1.7.
os :linux
详细描述:
有2个表t1,t2
t1包含了大约10万条数据,有Id 字段的pk.
t2是一个分区表,按时间分区,每月3个分区,10天一个,并建立了local index,并且一直建到2005年6月份,当然数据是按照日期顺序入库的,也就说是后来的分区都是空的。
在4月7号的时候对之后的所有分区作了
alter index index_name rebuild partition part_Namecompute statistics
从4月10日开始,也就是新的分区开始入数据了,大约有200万条数据,此时的查询异常的慢,之前是10sec,现在1个小时查不出来。下面是执行的语句和没有分析和分析过的分区的执行机会,请大家帮忙分析一下:
sql :
WHERE a.fx_sj >= TO_DATE ('2005-04-12 08:00:00', 'yyyy-mm-dd hh24:mi:ss')
AND a.fx_sj < TO_DATE ('2005-04-13 08:00:00', 'yyyy-mm-dd hh24:mi:ss')
AND a.id = b.id
GROUP BY b.col2
ORDER BY b.col2;
做了分析的空分区表入数据之后的执行计划:
SELECT STATEMENT, GOAL = CHOOSE
1255
265817
15151569
SORT GROUP BY
1255
265817
15151569
NESTED LOOPS
2
265817
15151569
TABLE ACCESS FULL
PDB_CUSER
t1
2
1636
57260
TABLE ACCESS BY LOCAL INDEX ROWID
PDB_CUSERt2
16248
357456
INDEX RANGE SCAN
PDB_CUSER
t2_INDX
16248
没有分析的分区表查询计划:
SELECT STATEMENT, GOAL = CHOOSE
1437
265899
15156243
SORT GROUP BY
1437
265899
15156243
HASH JOIN
184
265899
15156243
TABLE ACCESS FULL
PDB_CUSER
t1
2
1636
57260
TABLE ACCESS BY LOCAL INDEX ROWID
PDB_CUSER
t2
181
16253
357566
INDEX RANGE SCAN
PDB_CUSER
t2_INDX
2
16253