时间: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 有一个 目的 定义