oracle重建表分区 oracle分区表全分区扫描问题
oracle分区表全分区扫描问题
分区表 将一个大表根据某种规则分成多个小表 从而提高检索效率
查询分区表sql
Sql代码
select user_tables table_name
from user_tables
where user_tables partitioned = YES
通过以上命令可查询出数据库中登陆用户下的全部分区表
查询分区表分区字段sql
Sql代码
select a table_name a partitioned b partition_count lumn_name
from user_tables a user_part_tables b user_part_key_columns c
where a table_name = b table_name
and b table_name = c name
and c name = &table_name ;
通过以上命令可查询出某个分区表中的分区字段 查询条件中的表名需要大写
知道了那些是分区表和分区字段后 就可以分析具体某个含有分区表sql的执行计划

看执行了表的全分区扫描 还是单分区扫描 它们的执行效率相差很大
通过cost值可以看出 下面使用事例详细介绍一下
典型案例
Sql代码
select arc_e_cons_prc_amt mp_name
arc_e_cons_snap elec_addr
from arc_e_cons_prc_amt
sa_
arc_e_cons_snap
e_cat_prc
sa_c_trade_type
where (arc_e_cons_prc_amt CALC_ID = arc_e_cons_snap CALC_ID and
arc_e_cons_prc_amt ORG_NO = sa_ ORG_NO and
arc_e_cons_prc_amt PRC_CODE = e_cat_prc PRC_CODE and
arc_e_cons_prc_amt PARA_VN = e_cat_prc PARA_VN and
arc_e_cons_prc_amt TRADE_TYPE_CODE = sa_c_trade_type TRADE_CODE)
and (arc_e_cons_prc_amt YM >= and
arc_e_cons_prc_amt YM <= and
arc_e_cons_prc_amt ORG_NO = )
修改为如下sql:
Sql代码
select arc_e_cons_prc_amt mp_name
arc_e_cons_snap elec_addr
from arc_e_cons_prc_amt
sa_
arc_e_cons_snap
e_cat_prc
sa_c_trade_type
where (arc_e_cons_prc_amt CALC_ID = arc_e_cons_snap CALC_ID and
arc_e_cons_prc_amt ORG_NO = sa_ ORG_NO and
arc_e_cons_prc_amt PRC_CODE = e_cat_prc PRC_CODE and
arc_e_cons_prc_amt PARA_VN = e_cat_prc PARA_VN and
arc_e_cons_prc_amt TRADE_TYPE_CODE = sa_c_trade_type TRADE_CODE)
and (arc_e_cons_prc_amt YM >= and
arc_e_cons_prc_amt YM <= and
arc_e_cons_prc_amt ORG_NO = )
and arc_e_cons_snap ORG_NO = arc_e_cons_prc_amt ORG_NO
注 上面的sql中存在两个分区表arc_e_cons_snap和arc_e_cons_prc_amt
查询条件中要有两个表的分区字段条件
lishixinzhi/Article/program/Oracle/201311/17248