分区表将一个大表根据某种规则分成多个小表从而提高检索效率
查询分区表sql
Sql代码
select user_tablestable_name
from user_tables
where user_tablespartitioned = YES
通过以上命令可查询出数据库中登陆用户下的全部分区表
查询分区表分区字段sql
Sql代码
select atable_name apartitioned bpartition_count lumn_name
from user_tables a user_part_tables b user_part_key_columns c
where atable_name = btable_name
and btable_name = cname
and cname = &table_name;
通过以上命令可查询出某个分区表中的分区字段查询条件中的表名需要大写
知道了那些是分区表和分区字段后就可以分析具体某个含有分区表sql的执行计划
看执行了表的全分区扫描还是单分区扫描它们的执行效率相差很大
通过cost值可以看出下面使用事例详细介绍一下
典型案例
Sql代码
select arc_e_cons_prc_amtmp_name
arc_e_cons_snapelec_addr
from arc_e_cons_prc_amt
sa_org
arc_e_cons_snap
e_cat_prc
sa_c_trade_type
where (arc_e_cons_prc_amtCALC_ID = arc_e_cons_snapCALC_ID and
arc_e_cons_prc_amtORG_NO = sa_orgORG_NO and
arc_e_cons_prc_amtPRC_CODE = e_cat_prcPRC_CODE and
arc_e_cons_prc_amtPARA_VN = e_cat_prcPARA_VN and
arc_e_cons_prc_amtTRADE_TYPE_CODE = sa_c_trade_typeTRADE_CODE)
and (arc_e_cons_prc_amtYM >= and
arc_e_cons_prc_amtYM <= and
arc_e_cons_prc_amtORG_NO = )
修改为如下sql:
Sql代码
select arc_e_cons_prc_amtmp_name
arc_e_cons_snapelec_addr
from arc_e_cons_prc_amt
sa_org
arc_e_cons_snap
e_cat_prc
sa_c_trade_type
where (arc_e_cons_prc_amtCALC_ID = arc_e_cons_snapCALC_ID and
arc_e_cons_prc_amtORG_NO = sa_orgORG_NO and
arc_e_cons_prc_amtPRC_CODE = e_cat_prcPRC_CODE and
arc_e_cons_prc_amtPARA_VN = e_cat_prcPARA_VN and
arc_e_cons_prc_amtTRADE_TYPE_CODE = sa_c_trade_typeTRADE_CODE)
and (arc_e_cons_prc_amtYM >= and
arc_e_cons_prc_amtYM <= and
arc_e_cons_prc_amtORG_NO = )
and arc_e_cons_snapORG_NO = arc_e_cons_prc_amtORG_NO
注上面的sql中存在两个分区表arc_e_cons_snap和arc_e_cons_prc_amt
查询条件中要有两个表的分区字段条件
Labels parameters