zoukankan      html  css  js  c++  java
  • Oracle数据库--解决单张表中数据量巨大(大数据、数据量上百万级别,后查询,更新数据等耗时剧增)

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/QQ578473688/article/details/54561397
    思路1:采用备份表
    备份表中存储不活跃的数据eg:只有查询操作的数据(数据的部分属性字段不再更改)且查询次数也较少;
    备份表可以是一张或者多张备份表,若采用多张备份表,则定期创建备份表(备份表的命名要规范,可以考虑使用原表名称+时间戳命名)
    采用多张备份表:定期创建一个备份表(备份一定期间范围内的数据,多张备份表采用联合查询)
    多张备份表时可以使用视图对多个备份表进行联合查询。
    是否采用多张备份表是基于总的数据量的大小+Oracle数据库对单张表存储数据的支持。
    思路2:Oracle数据库采用分区表(物理磁盘上存储在不同的位置,逻辑上仍为一张表)
    当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,
    只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。
    从应用程序的角度来看,分区后的表与非分区表完全相同,使用 SQL DML 命令访问分区后的表时,无需任何修改。
    使用分区表操作步骤:
    1.创建多个表空间:(备注:ADC_BACK_1 、ADC_BACK_2、ADC_BACK_3、USERS 为表空间名称,datafile后面指定了表空间的物理磁盘存储路径)
    create tablespace ADC_BACK_1 datafile 'D:OracleBackADC1.dnf' size 500M;
    create tablespace ADC_BACK_2 datafile 'D:OracleBackADC2.dnf' size 500M;
    create tablespace ADC_BACK_3 datafile 'D:OracleBackADC3.dnf' size 500M;
    create tablespace USERS datafile 'D:OracleBackADC4.dnf' size 500M;
    2.一次性在不同的表空间创建数据库表(同时指定表字段、数据存储到哪一表空间的判断标准)如下:

    (备注:range()指定数据库表中的某一字段作为数据存储到不同表空间的判断标准)

    (备注:此处在4个不同的表空间分别创建一张表,4张表的结构相同,以后会根据不同的时间产生的数据存储在不同的表空间的表中)
     
    (备注:在最高的分区中,MAXVALUE被定义。MAXVALUE代表了一个不确定的值。这个值高于其它分区中的任何分区键的值,
    也可以理解为高于任何分区中指定的VALUE LESS THEN的值,同时包括空值。)
    3.以前的SQL查询语句不变,一样查询数据
    (备注:查询数据时,不再全表扫面,只是根据条件扫描一个或多个表空间中的数据库表,所以查询性能会有很好的提升)
     
    参考:https://www.2cto.com/database/201604/503199.html

    事例:

    create tablespace ADC_BACK_1 datafile 'F:Oracle ablespacesADC_BACK_1.dnf' size 100M autoextend on next 100m maxsize 20480m extent management local;
    create tablespace ADC_BACK_2 datafile 'F:Oracle ablespacesADC_BACK_2.dnf' size 100M autoextend on next 100m maxsize 20480m extent management local;
    create tablespace ADC_BACK_3 datafile 'F:Oracle ablespacesADC_BACK_3.dnf' size 100M autoextend on next 100m maxsize 20480m extent management local;
    create tablespace ADC_BACK_4 datafile 'F:Oracle ablespacesADC_BACK_4.dnf' size 100M autoextend on next 100m maxsize 20480m extent management local;
    create tablespace ADC_BACK_5 datafile 'F:Oracle ablespacesADC_BACK_5.dnf' size 100M autoextend on next 100m maxsize 20480m extent management local;

     

    create table MON_PROCESS_RECORD_BACK(
    INFOID VARCHAR2(36),
    DIC_FLOWTYPE_ID VARCHAR2(36),
    START_TIME DATE,
    END_TIME DATE,
    IS_SUCCESS CHAR(1),
    ERROR_CODE VARCHAR2(2000),
    DEL_FLAG CHAR(1),
    ID VARCHAR2(36) PRIMARY KEY,
    DEALWAY CHAR(1),
    DETAIL VARCHAR2(4000),
    DIC_EB_PLATFORM_ID VARCHAR2(36),
    STATE VARCHAR2(100),
    INSTRUCTION_ID VARCHAR2(36),
    INSTRUCTION_NUM VARCHAR2(4),
    EBI_INFO_CODE VARCHAR2(50),
    IS_DISPLAY VARCHAR2(1)
    )
    partition by range(EBI_INFO_CODE)(
    partition part_01 values less than('201608100000000000000') tablespace ADC_BACK_1,
    partition part_02 values less than('201609100000000000000') tablespace ADC_BACK_2,
    partition part_03 values less than('201610100000000000000') tablespace ADC_BACK_3,
    partition part_04 values less than('201611100000000000000') tablespace ADC_BACK_4,
    partition part_05 values less than('201612300000000000000') tablespace ADC_BACK_5,
    partition part_06 values less than(maxvalue) tablespace USERS
    );

     

    转移数据:

    insert into MON_PROCESS_RECORD_BACK(
    INFOID,
    DIC_FLOWTYPE_ID,
    START_TIME,
    END_TIME,
    IS_SUCCESS,
    ERROR_CODE,
    DEL_FLAG,
    ID,
    DEALWAY,
    DETAIL,
    DIC_EB_PLATFORM_ID,
    STATE,
    INSTRUCTION_ID,
    INSTRUCTION_NUM,
    EBI_INFO_CODE,
    IS_DISPLAY
    )
    select 
    INFOID,
    DIC_FLOWTYPE_ID,
    START_TIME,
    END_TIME,
    IS_SUCCESS,
    ERROR_CODE,
    DEL_FLAG,
    ID,
    DEALWAY,
    DETAIL,
    DIC_EB_PLATFORM_ID,
    STATE,
    INSTRUCTION_ID,
    INSTRUCTION_NUM,
    EBI_INFO_CODE,
    IS_DISPLAY
    from MON_PROCESS_RECORD;

  • 相关阅读:
    Java基础教程(15)--枚举类型
    Java基础教程(14)--嵌套类
    Java基础教程(13)--包
    Java基础教程(12)--深入理解类
    Java基础教程(11)--对象
    Java基础教程(10)--类
    Java基础教程(9)--流程控制
    Java基础教程(8)--表达式、语句和块
    Java基础教程(7)--运算符
    Java基础教程(6)--数组
  • 原文地址:https://www.cnblogs.com/lcword/p/9562559.html
Copyright © 2011-2022 走看看