数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

oracle分区表全分区扫描问题


发布日期:2023年03月07日
 
oracle分区表全分区扫描问题

分区表将一个大表根据某种规则分成多个小表从而提高检索效率

查询分区表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

上一篇:如何恢复一个只有完好数据文件的数据库?

下一篇:如何改善Oracle的索引?