zoukankan      html  css  js  c++  java
  • Oracle的分区表

    Oracle允许用户把一个表中的所有行分为几个部分,并将这些部分存储在不同的位置。被分区的表称为分区表,分成的每个部分称为一个分区。

    什么时候使用分区表:

    1)   数据量大小超过2GB。

    2)   已有的数据和新添加的数据有明显的界限划分。

     

    分区表的优缺点

    优点:
    1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
    2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
    3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
    4、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能
    缺点:
    分区表相关:已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能。
     
    分区表的分类:
    分为范围分区,列表分区,散列分区,复合分区,间隔分区和虚拟分区等。
    间隔分区和虚拟分区是Oracle11g的新增特性。
     
    范围分区:
    范围分区(range)是应用范围比较广的表分区方式,它以列的值的范围作为分区得划分条件,将记录存放到列值的range分区中。
    --创建范围分区表
    create table students
    (
    stuid number primary key not null,
    stuname varchar2(32) not null,
    stuage number
    )
    --按照年龄划分
    partition by range(stuage)
    (
    partition p1 values less than(18),
    partition p2 values less than(40),
    partition p3 values less than(60),
    partition p4 values less than(maxvalue)
    )
     
     
    --向表中添加数据
    insert into students(stuid,stuname,stuage) values(1,'李四',20);
    insert into students(stuid,stuname,stuage) values(2,'张帆',16);
    insert into students(stuid,stuname,stuage) values(3,'张三',35);
    insert into students(stuid,stuname,stuage) values(4,'王八',65);
    insert into students(stuid,stuname,stuage) values(5,'张飞',70);
    insert into students(stuid,stuname,stuage) values(6,'林白',41)

    --查询年龄在第二个分区表中的数据
    select *from students partition(p2)
     
    --删除年龄在第二个分区表中的数据
    delete from students partition(p2)
     
    注意事项:

    (1)一般创建表分区时,都会将最后一个分区设置为maxvalue,使其他数据落入此分区。一旦需要某一数据时,可以利用拆分分区的技术将需要的数据从最后一个分区分离出去,单独形成一个分区。如果没有创建足够大的分区,插入的数据超出范围就会报错。

    (2)如果插入的数据就是分区键上的值,则该数据落入下一分区。

     
     
     
    间隔分区
    间隔分区是Oracle 11g版本新引入的分区方法,是范围分区的一种增强功能,可以实现范围分区的自动化。他的优点为,在不需要创建表时就将所有分区划分清楚。间隔分区随着数据的增加会划分更多的分区,并自动创建新的分区。
     
    --在现有表的基础上创建间隔分区(以年龄为划分区
    create table studentback
    partition by range(age)
    interval(20)
    (
    partition p1 values less than(18)
    )as select *from student

    --查看间隔分区自动创建的分区名称
    select  table_name,partition_name
    from user_tab_partitions
    where table_name=UPPER('studentback')

    --查看间隔分区表

    select *from studentback partition(SYS_P21)
    select *from studentback partition(p1)

    --以时间为划分区
    CREATE table schoolback
            PARTITION BY RANGE(birthday)
            INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
            (PARTITION P1 VALUES LESS THAN (to_date('2014-01-01','yyyy/mm/dd')))
            AS SELECT * FROM school;

    --查看间隔分区自动创建的分区名称
    select  table_name,partition_name
    from user_tab_partitions
    where table_name=UPPER('schoolback')

     --查看分区数据
    select *from schoolback partition(SYS_P24)

    select *from schoolback partition(SYS_P23)

    select *from schoolback partition(SYS_P22)

     select *from schoolback partition(P1)

    select *from school

  • 相关阅读:
    Hibernate中session的产生的方式
    Hibernate 多对多关联Demo
    Hibernate 一对多双向关联Demo
    Beta(0/7)
    获得小黄衫感想(2)
    软工实践作业(十)
    成员交换情况
    Alpha事后诸葛亮
    Alpha冲刺总结
    Alpha(10/10)
  • 原文地址:https://www.cnblogs.com/sujulin/p/8080547.html
Copyright © 2011-2022 走看看