设为首页 收藏本站
查看: 412|回复: 0

[经验分享] 分区表、分区索引和全局索引部分总结

[复制链接]

尚未签到

发表于 2015-6-16 10:44:24 | 显示全部楼层 |阅读模式
  分区表、分区索引和全局索引:
  在一个表的数据超过过2000万条或占用2G空间时,建议建立分区表。
  
      create table ta(c1 int,c2 varchar2(16),c3 varchar2(64),c4 int constraint pk_ta primary key (c1)) partition by range(c1)(partition p1 values less than (10000000),partition p2 values less than (20000000),partition p3 values less than (30000000),partition p4 values less than (maxvalue));
  分区索引和全局索引:
  分区索引就是在所有每个区上单独创建索引,它能自动维护,在drop或truncate某个分区时不影响该索引的其他分区索引的使用,也就是索引不会失效,维护起来比较方便,但是在查询性能稍微有点影响。
  
      create index idx_ta_c2 on ta(c2) local (partition p1,partition p2,partition p3,partition p4); 或者 create index idx_ta_c2 on ta(c2) local ;
  另外在create unique index idx_ta_c2 on ta(c2) local ;系统会报ORA-14039错误,这是因为ta表的分区列是c1,oracle不支持在分区表上创建PK主键时主键列不包含分区列,创建另外的约束 (unique)也不可以。
  全局索引就是在全表上创建索引,它可以创建自己的分区,可以和分区表的分区不一样,也就是它是独立的索引。在drop或truncate某个分区时需要创建索引alter index idx_xx rebuild,也可以alter table table_name drop partition partition_name update global indexes;实现,但是要花很长时间在重建索引上。可以通过查询user_indexes、user_part_indexes和 user_ind_partitions视图来查看索引是否有效。
  
      create index idx_ta_c3 on ta(c3);
  或者把全局索引分成多个区(注意和分区表的分区不一样):
  
      create index idx_ta_c4 on ta(c4) global partition by range(c4)(partition ip1 values less than(10000),partition ip2 values less than(20000),partition ip3 values less than(maxvalue));
  注意索引上的引导列要和range后列一致,否则会有ORA-14038错误。
  oracle会对主键自动创建全局索引
  如果想在主键的列上创建分区索引,除非主键包括分区键,还有就是主键建在两个或以上列上。
  在频繁删除表的分区且数据更新比较频繁时为了维护方便避免使用全局索引。
  
  显示Oracle查看分区表信息
  显示数据库所有分区表的信息:DBA_PART_TABLES
  显示当前用户可访问的所有分区表信息:ALL_PART_TABLES
  显示当前用户所有分区表的信息:USER_PART_TABLES
  显示Oracle查看分区表信息 显示数据库所有分区表的详细分区信息:DBA_TAB_PARTITIONS
  显示当前用户可访问的所有分区表的详细分区信息:ALL_TAB_PARTITIONS
  显示当前用户所有分区表的详细分区信息:USER_TAB_PARTITIONS
  显示子分区信息 显示数据库所有组合分区表的子分区信息:DBA_TAB_SUBPARTITIONS
  显示当前用户可访问的所有组合分区表的子分区信息:ALL_TAB_SUBPARTITIONS
  显示当前用户所有组合分区表的子分区信息:USER_TAB_SUBPARTITIONS
  显示分区列 显示数据库所有分区表的分区列信息:DBA_PART_KEY_COLUMNS
  显示当前用户可访问的所有分区表的分区列信息:ALL_PART_KEY_COLUMNS
  显示当前用户所有分区表的分区列信息:USER_PART_KEY_COLUMNS
  显示子分区列 显示数据库所有分区表的子分区列信息:DBA_SUBPART_KEY_COLUMNS
  显示当前用户可访问的所有分区表的子分区列信息:ALL_SUBPART_KEY_COLUMNS
  显示当前用户所有分区表的子分区列信息:USER_SUBPART_KEY_COLUMNS
  ---------------------------------------------------------------------------------------------------
  怎样查询出Oracle数据库中所有的的分区表
  select * from user_tables a where a.partitioned='YES'删除一个表的数据是truncate table table_name;
删除分区表一个分区的数据是alter table table_name truncate partition p5;
  如果我要将分区表中各个分区的数据都清空,可以用truncate table table_name;吗?
还是必须从头执行

  • alter table table_name truncate partition p1;   
  • alter table table_name truncate partition p2;   
  • alter table table_name truncate partition p3;   
  • alter table table_name truncate partition p4;   
  • alter table table_name truncate partition p5;   
  • alter table table_name truncate partition p6;   
  答:truncate table table_name

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-77878-1-1.html 上篇帖子: Linux 下 新增Oracle10g 实例 下篇帖子: PL/SQL报错:无法解析指定的连接标识符
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表