Oracle数据库的分区

  • 分区

    平常开发中最经常使用的技术,主要针对于大数据量,频繁查询数据等需求oracle

    oracle 提供了 7种分区,本文主要介绍较经常使用的几种less

    • range 分区

      区域分区,分区的时候必须在建立表时指定函数

      • 语法:大数据

        create table (...) partition by range (filed) 
          	(partition r1 values less than (value));
          
          # value 为分区的依据,好比value=1000,即不超过1000的值都会存放在此分区,
          # 若是只有一个分区,那么大于1000的值便没法插入。能够指定value=maxvalue
      • 查看分区状况:code

        全部分区的状况,能够经过 where 条件判断索引

        select * from user_table_partitions;
      • 查看分区数据:ci

        select * from table partition(r1);
      • 修改分区:开发

        addhash

        alter table tablename add partition r2 values less than (maxvalue);

        delit

        alter table tablename drop partition r2;
      • 跨分区操做

        更新数据时不能够跨分区操做,好比更新以后的内容要从1分区移动到2分区,那么须要设置可移动的分区才能够跨分区查询,不然没法操做。

        alter table tablename enable row movement;
      • 分区索引

        分区以后虽然提升了查询的效率,但仅仅是提升了数据的范围,依然须要创建分区索引,进一步提升效率。

        • 分区索引分为两大类
          • local; 在每一个分区创建索引

            语法: create index index_name on table(field) local;

            查看: select * from user_ind_partitions;

            索引的字段必定是分区的字段

          • global; 全局索引

            • 一种是全局创建索引,这种方式分不分区都同样,不建议使用;

            • 前缀索引

              还有一种是自定义索引的区间的索引,即前缀索引,这个是很是有意义的。

              语法: 必须指定 maxvalue

              create index index_name on table(field) global
                	partition by range(filed) (
                	partition r1 values less than(value),
                	partition r2 values less than(maxvalue)
                  );
    • hash 分区

      实现了均匀的负载值分配,增长 hash 分区能够从新分配数据

      创建

      create table table_name (empno number,ename varchar(20)) 
        	partition by hash(empno) (partition p1, partition p2)

      查看分区结构

      select * from user_tab_partitions where table_name= "table_name";

      查看分区数据

      select * from table_name partition(p1);
    • list 分区

      建立

      create table table_name (
        	empno number,
        	ename varchar(20), 
        	city varchar(20)
        	partition by list(city) (
        		partition east values("shanghai“)
        	)
        )
    • 复合分区 对range分区的再次hash分区

      • 建立

        create table table_name(
          	sno number,
          	sname varchar(20)
          )
          partition by range (sno)
          subpartition by hash (sname) # 子分区
          subpartition 4               # 子分区分红4分
          (
          	partition p1 values less than(1000),
          	partition p2 values less than(maxvalue)
          )
    • 间隔分区, 最经常使用及最好用

      是一种分区自动化的分区,能够指定时间间隔分区,一直是 oracle 引觉得荣的一项技术

      语法:

      create table table_name (
        	sid int,
        	sdata timestamp )
        	partition by range(sdata) 
        	interval (
        		numtoyminterval(1, "MONTH")  # 函数,计算月份
        					 )
        		(
        			partition p1 values less than (TIMESTAMP'2019-02-01 00:00:00')
        		)

      至关于在 2014-02-01 以前的数据,创建一个分区;

      以后的数据每隔一个月创建一个分区。

相关文章
相关标签/搜索