当前位置:Gxlcms > 数据库问题 > Oracle学习(十四)分表分区

Oracle学习(十四)分表分区

时间:2021-07-01 10:21:17 帮助过:5人阅读

注意,分表使用时,查询语句里要进行动态拼装查询的表名。

三、分区

简介

年表创建过后,查询就是查询年表中的数据,可是虽然分表了,但是年表中的数据量仍然很大,查询速度虽然有提升,但并不能满足用户的要求,此时考虑在年表中再根据月份进行分区。

定义

表分区后,逻辑上仍然是一张表,只不过将表中的数据在物理上存放到多个表空间

目的

这样在查询数据时,会查询相应分区的数据,减少SQL操作的数据量,避免了全表扫描,从而提升查询效率

水平分区

进行分区,举个例子来说,就是一个表中有1000万条数据,每100万条数据划一个分区,这样就将表中数据分到10个分区中去。

PS:水平分区要通过某个特定的属性列进行分区,如用时间先orderBy后再分区。

垂直分区

进行分区,减少表的宽度,从而提升查询效率。

比如一个学生表中,有他相关的信息列,还有论文列以CLOB存储,可以把这些不经常使用的CLOB划分到另一个分区,需要访问时再调用它。

代码样例

--水平分区

--按照订单时间进行水平分区
CREATE TABLE ORDER_ACTIVITIES   
(   
    ORDER_ID      NUMBER(7) NOT NULL,   
    ORDER_DATE    DATE,   
    TOTAL_AMOUNT NUMBER,   
    CUSTOTMER_ID NUMBER(7),   
    PAID   CHAR(1)   
)   
PARTITION BY RANGE (ORDER_DATE)   
(  
  PARTITION ORD_ACT_PART01 VALUES LESS THAN (TO_DATE(01- MAY -2003,DD-MON-YYYY)) TABLESPACE ORD_TS01,  
  PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE(01-JUN-2003,DD-MON-YYYY)) TABLESPACE ORD_TS02,  
  PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE(01-JUL-2003,DD-MON-YYYY)) TABLESPACE ORD_TS03  
);  

--按省份进行分区
CREATE  TABLE  ListTable  
(   
    id    INT  PRIMARY  KEY ,   
    name  VARCHAR (20),   
    area  VARCHAR (10)   
)   
PARTITION  BY  LIST (area)   
(   
    PARTITION  part1 VALUES (guangdong,beijing) TABLESPACE  Part1_tb,   
    PARTITION  part2 VALUES (shanghai,nanjing)  TABLESPACE  Part2_tb   
);  


--垂直分区

PS:垂直分区思路是将写入操作比较频繁的数据表,把这个两个表分离出来,放在不同的服务器
PS:可以理解为外键的关联方式(不知道准不准确...)

 

 

Oracle学习(十四)分表分区

标签:写入   sdn   date   特定   article   _id   有一个   目的   定义   

人气教程排行