• Oracle规划分区


    Oracle在创建表的同时规划分区

    1、分区概念

    Oracle在实际业务生产环境中,经常会遇到随着业务量的逐渐增加,表中的数据行数的增多,Oracle对表的管理和性能的影响也随之增大。对表中数据的查询、表的备份的时间将大大提高,以及遇到特定情况下,要对表中数据进行恢复,也随之数据量的增大而花费更多的时间。这个时候,Oracle数据库提供了分区这个机制,通过把一个表中的行进行划分,归为几部分,可以减少大数据量表的管理和性能问题。利用这种分区方式把表数据进行划分的机制称为表分区,各个分区称为分区表。

    2、分区作用

    Oracle分区对于大型表(大数据量)非常有用,分区的作用主要有:

    1、改善大型表的查询性能,因为可以通过查询对应分区表中对应的数据,而不需要查询整个表。

    2、表更容易管理,因为分区表的数据存储在各个分区中,所以可以按照分区建,来管理对应分区当中的数据,可以按照分区加载和删除其中的数据,比在不分区情况下,更容易管理数据。以及在特定的事故情况下,通过备份好的分区,可以快速恢复对应分区当中的数据,也不需要对全表数据进行恢复。

    3、创建分区

    /*==============================================================*/
    /* Table: T_ATTENSION_OFFACC                                    */
    /*==============================================================*/
    --表结构
    create table T_ATTENSION_OFFACC 
    (
       T_USER_MOBILE        varchar2(11)         not null,
       T_OFFICIAL_ACCOUNT_ID VARCHAR2(50)         not null,
       T_ATTENSION_DATE     DATE,
       T_ATTENSION_STATE    VARCHAR2(1),
       constraint PK_T_ATTENSION_OFFACC primary key (T_USER_MOBILE, T_OFFICIAL_ACCOUNT_ID)
    )
    
    --分区
    partition by range(T_ATTENSION_DATE)(
    partition p_attension_2020_02 values less than (TO_DATE('2020-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))
              TABLESPACE TS_ATTENSION_2020_02,
    partition p_attension_2020_03 values less than (TO_DATE('2020-04-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))
              TABLESPACE TS_ATTENSION_2020_03,
    partition p_attension_2020_04 values less than (TO_DATE('2020-05-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))
              TABLESPACE TS_ATTENSION_2020_04,
    partition p_attension_2020_05 values less than (TO_DATE('2020-06-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))
              TABLESPACE TS_ATTENSION_2020_05,
    partition p_attension_2020_06 values less than (MAXVALUE)
              TABLESPACE TS_ATTENSION_2020_06
    );

    这里使用命令partition by range对表的字段(T_ATTENSION_DATE)进行分区,如录入日期小于2020年03月的会被放入分区p_attension_2020_02 当中。

    所以,2020_02月份的数据会被放入p_attension_2020_02 这个分区当中,2020_03月份的数据会被放入p_attension_2020_03这个分区当中。 这里不必为最后一个分区指定最大值,maxvalue关键字会告诉Oracle使用这个分区来存储前面几个分区当中不能存储的数据。

    上面实例展示的是Oracle按照值的范围进行分区,Oracle还支持散列分区,通过某一个字段,把表中的数据散列在各个分区中。可以通过关键字partition by hash,把分区散列到不同的表空间当中。

    Oracle还支持列表分区(partition by list),它是通过按照指定分区建的值归并到各个分区,其实这里学生成绩表也可以考虑按照课程进行列表分区。

    总结:Oracle分区对大型表(数据量大)有重大的性能提升,所以在表结构设计时,需要提前按照相关业务需求进行相应的改进。

    4、查看分区数据

    select * from test_env.t_attension_offacc partition(P_ATTENSION_2020_02);
  • 相关阅读:
    每天一道算法题(13)——使用递归颠倒栈
    每天一道算法题(12)——和为n的连续正数序列或者随机数
    函数模板
    答题总结(1)
    顶点间最短路径长度之探寻算法
    最小生成树
    new与delete,malloc与free
    C++的继承与接口
    笔记13 AOP中After和AfterReturning的区别
    笔记12 注入AspectJ切面
  • 原文地址:https://www.cnblogs.com/beanbag/p/12369146.html
Copyright © 2020-2023  润新知