• ORACLE 11g 分区浅试


    项目中遇到这样的问题,表的结构简单,但数据量很大,且对于表的每一列可能都需要有查询,于是速度很慢,尤其是每当过去一段时间后,数据插入和查找都开始变得困难。

    于是想到分区。然而在10g以前,大体只能采取按照范围或散列分区,加入需要在时间列上进行分区,将导致灾难性后果,每天一个分区,手写会要命,需要一个作业新建分区。数据库升级到了11g,发现支持Interval分区,即一个范围分区的增强功能,可以实现equi-sized范围分区的自动化,创建的分区作为元数据,只有最开始的分区是永久分区。随着数据的增加会分配更多的部分,并自动创建新的分区和本地索引。

    下面是一些尝试:

    1. 通过EM创建表并新建分区。.在分区向导中,可以看到有关Interval分区的选项——有提示说,可以实现自动增加分区,但是同一页面上有一个必填的选项要求指定分区个数,我觉得puzzled,但是没有别的选择。新建之后查看DDL,没有看到关于Interval的描述。尝试插入几条新数据,果然无效。

    2. 使用SQL直接新建Interval分区,如下:

     然后尝试插入几条数据,成功地分布在了不同的分区。

    代码
     1 CREATE TABLE "AA"."T_RECORD" 
     2 (   "RECORD_ID" NUMBER,
     3     "RECORD_TIME" DATE NOT NULL , 
     4     "RECORD_CONTENT" VARCHAR2(40NOT NULL , 
     5     "RECORD_STYLE" VARCHAR2(10DEFAULT 'B' NOT NULL , 
     6     "RECORD_DOM_FK" NUMBER NOT NULL , 
     7       CONSTRAINT 
     8           "FK_RECORD_DOM" FOREIGN KEY ("RECORD_DOM_FK") 
     9              REFERENCES "AA"."T_DOM" ("DOM_ID") VALIDATE ,
    10       CONSTRAINT 
    11           "PK_RECORD" PRIMARY KEY ("RECORD_ID") VALIDATE 
    12 
    13 TABLESPACE "SPACE" PARTITION BY RANGE (RECORD_TIME) 
    14 INTERVAL (NUMTODSINTERVAL(1'DAY'))
    15 STORE IN(SPACE)
    16 ( PARTITION "T_RACORD_P1" VALUES LESS THAN (TO_DATE('2009-06-01','YYYY-MM-DD'))
    17 )

     一些尚未验证的问题:

    1. 经过这样的以每天为一个分区的形式是否能解决本文开始时所提出的问题,使得效率提高 。

    2. 这样的分区在时间长了以后是否会给系统造成较大负担。

  • 相关阅读:
    点击按钮倒计时
    js实现-小框框全选
    CSS文字,文本,背景,盒模型等记录
    xps9560黑苹果展示
    面试——谈谈你对抽象和接口的理解(小知识大考点)
    谈谈你对Java 面向对象思想的理解
    谈谈你对Java 平台的理解
    HashMap1.7 问题总结
    2.3.2 InnoDB内存
    2.3 InnoDB 体系架构
  • 原文地址:https://www.cnblogs.com/noam/p/1626684.html
Copyright © 2020-2023  润新知