关系型数据库的分区表

oracle HASH分区表

  1. 分区数建议是2的幂数,不要建太多个分区;分区不足2的幂数则进行合并,造成分布不均匀
  2. 增加分区,是旧的某个经过合并的大分区的数据分裂出来的,分裂成新后最后两个分区,所以增加分区会锁定最后一个&&用于分裂的那一个分区
  3. 计算出用于平摊数据那个分区的方法:增加第a个分区-大于或者等于a的2的幂数/2,如增加第13个分区,则:13-16/2=5,即增加13分区,5分区会分配数据给13分区(已经分裂的分区也还占位)
  4. 计算占多数据的分区数量:大于或者等于分区数的2的幂数-分区数;如16-12=4,有4个分区数量比较多
  5. HASH分区键要尽量地连续,不连续造成分区数据量分布不均匀
--创建hash分区表hash_part_tab
create table hash_part_tab (id number,deal_date date,area_code number,contents varchar2(4000))
partition by hash (deal_date)
PARTITIONS 12;

--以下是插入一整年日期随机数和表示福建地区号含义(591到599)的随机数记录,共有10万条,如下:
insert into hash_part_tab
  (id, deal_date, area_code, contents)
  select rownum,
         to_date(to_char(sysdate - 365, 'J') +
                 TRUNC(DBMS_RANDOM.VALUE(0, 365)),
                 'J'),
         ceil(dbms_random.value(590, 599)),
         rpad('*', 400, '*')
    from dual
  connect by rownum <= 100000;
commit;

--查看当前用户下有哪些分区表
select TABLE_NAME from user_tables a where a.partitioned = 'YES';

--查看分区表名,分区名,表空间等信息
select table_name, partition_name, tablespace_name, high_value from user_tab_partitions where table_name = 'HASH_PART_TAB';

--通过object_id查看每个分区数据分布情况
select * from dba_segments where segment_name = 'HASH_PART_TAB';
select * from dba_objects where object_name='HASH_PART_TAB';
select dbms_rowid.rowid_object(rowid) obj_id, count(*)
  from HASH_PART_TAB
 group by dbms_rowid.rowid_object(rowid)
 order by 1;

--增加新分区P1(13分区,由5分区分裂成12,13分区,原5分区被后浪卷上来)
alter table HASH_PART_TAB add partition P1;
5分区: 11094
select 4476+6618 from dual;--12,13分区

--增加新分区P2
alter table HASH_PART_TAB add partition P2;

--增加新分区P3
alter table HASH_PART_TAB add partition P3;

--增加新分区P4
alter table HASH_PART_TAB add partition P4;

--增加新分区P5,第一个分区OBJ_ID=77369分裂成两个新分区,其他分区数据不变。
alter table HASH_PART_TAB add partition P5;

--HASH 分区表不能通过如下方式进行删除
alter table HASH_PART_TAB drop partition P5;
--ORA-14255: table is not partitioned by Range, List, Composite Range or Composite List method
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

很Man的DM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值