10.2.2 范围分区
范围分区的方法是按照某个列或几个列的值的范围来创建分区,当用户向表中写入数据时,数据库服务器将按照这些列上的数据的大小,将数据写入相应的分区。
在创建范围分区时,首先要指定按照哪些列进行分区,然后要为每个分区指定数据范围。范围分区的原则是:数据应尽可能均匀地分布在各个分区中,如果做不到这一点,应该考虑使用其他类型的分区。
例如,以下语句创建一个分区表call,用来记录用户的电话通话信息,包括主叫、被叫、通话的年、月、日及时长,并且根据月进行分区。
SQL>CREATE TABLE call(
caller char(15),
callee char(15),
year number(4),
month number(2),
day number(2),
duration number(4))
PARTITION BY RANGE(month)
(PARTITION P1 VALUES LESS THAN(4)TABLESPACE ts1,
PARTITION P2 VALUES LESS THAN(7)TABLESPACE ts2,
PARTITION P3 VALUES LESS THAN(10)TABLESPACE ts3,
PARTITION P4 VALUES LESS THAN(13)TABLESPACE ts4
);
需要说明的是,在上述例子中创建的表可能不符合常规,这仅仅是为了说明分区表的创建方法,因为在一般的表中,年、月、日这样的列是合在一起,通过一个列实现的。
在创建分区表时,首先通过“PARTITION BY RANGE”子句指定分区的类型为范围分区,然后在这个子句之后的小括号中指定一个或多个列,作为分区的依据。
表中的每个分区都可以通过“PARTITION”子句指定一个名称,如果没有指定,数据库服务器将自动为其指定一个名称。每个分区都有一个范围,通过“VALUE LESS THAN”子句可以为分区指定上界,而它的下界是前一个分区的上界。对于最后一个分区,它的上界可以用“MAXVALUE”来代替。
当在分区表中执行DML操作时,实际上是在各个分区上透明地修改数据。当执行SELECT命令时,可以指定查询哪个分区上的数据,如果不指定,则查询整个表中的数据。例如:
SQL>SELECT*FROM call PARTITION(P1);