表空间是指磁盘上的一块存储区域,用来存放表。
使用范围分区法对数据量大的表进行分区,分区存放到不同的表空间。
范围分区就是用表中的某个字段值的范围进行分区。
比如:
1)用数值型的id字段,id<100000的在第1个分区,100000<=id<200000的在第二个分区。
2)用日期类型的字段,2011年的数据在一个分区,2012年的数据在另一个分区,或者也可以按月份进行划分。
范围分区语法:
1)partition by range(field) field 就是表中要划分范围的那个字段。
2)VALUES LESS THAN(value) value 就是field的值,表示小于这个值的。
如VALUES LESS THAN(1000) 就表示属性值小于1000,不包括1000
如VALUES LESS THAN (TO_DATE('2012/2/1','yyyy/MM/dd')) 就表示属性值小于2012年2月1日的,不包括2012年2月1日
3)在最高的分区中,VALUES LESS THAN(maxValue)定义的是一个最大的值
范围分区步骤:
1)建立表空间
建立三个表空间测试用
CREATE TABLESPACE APP_TS_01 --建立第一个表空间 APP_TS_01 NOLOGGING --不生成日志 DATAFILE '/home/oracle/oradata/appdata/app_data_01.def' --指定表空间在磁盘上的位置 SIZE 1024M --指定表空间大小 CREATE TABLESPACE APP_TS_02 --建立第二个表空间 APP_TS_02 NOLOGGING --不生成日志 DATAFILE '/home/oracle/oradata/appdata/app_data_02.def' --指定表空间在磁盘上的位置 SIZE 1024M --指定表空间大小 CREATE TABLESPACE APP_TS_03 --建立第三个表空间 APP_TS_03 NOLOGGING --不生成日志 DATAFILE '/home/oracle/oradata/appdata/app_data_03.def' --指定表空间在磁盘上的位置 SIZE 1024M --指定表空间大小
2)建立表和对表进行分区
--创建订单表 create table t_order ( id NUMBER primary key not null , --主键 order_no VARCHAR2(30) not null, --订单号 order_time DATE not null --订单时间 ) --对订单表进行分区 partition by range (order_time)--根据订单时间范围进行划分 ( --小于2012年1月份的数据存放到分区t_order_01,存在表空间APP_TS_01 PARTITION t_order_01 VALUES LESS THAN (TO_DATE('2012/2/1','yyyy/MM/dd')) TABLESPACE APP_TS_01, --2012年2月份的数据存放到分区t_order_02,存在表空间APP_TS_02 PARTITION t_order_02 VALUES LESS THAN (TO_DATE('2012/3/1','yyyy/MM/dd')) TABLESPACE APP_TS_02, --2012年3月份的数据存放到分区t_order_03,存在表空间APP_TS_03 PARTITION t_order_03 VALUES LESS THAN (TO_DATE('2012/4/1','yyyy/MM/dd')) TABLESPACE APP_TS_03 )
4)查询分区数据
--查询所有分区数据 select * from t_order --只查t_order_01分区的订单数据 select * from t_order PARTITION(t_order_01) --联合查询t_order_01分区和t_order_02分区的数据 select * from t_order PARTITION(t_order_01) UNION ALL select * from t_order PARTITION(t_order_02)
5)查看当前用户哪些表有分区
--查看当前用户有哪些表已分区 SELECT * from USER_TABLES where partitioned='YES'
6)查看某个表有多少个分区
--查询某个表有多少个分区 SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='表名';