表空間是指磁盤上的一塊存儲區域,用來存放表。

  使用範圍分區法對數據量大的表進行分區,分區存放到不同的表空間。

  範圍分區就是用表中的某個字段值的範圍進行分區。

  比如:

  1)用數值型的id字段,id<100000的在第1個分區,100000<=id<200000的在第二個分區。

  2)用日期類型的字段,2011年的數據在一個分區,2012年的數據在另一個分區,或者也可以按月份進行劃分。

 

  範圍分區語法:

field)    field 就是表中要劃分範圍的那個字段。

value)   value 就是field的值,表示小於這個值的。

1000) 就表示屬性值小於1000,不包括1000

TO_DATE('2012/2/1','yyyy/MM/dd')) 就表示屬性值小於2012年2月1日的,不包括2012年2月1日

  3)在最高的分區中,VALUES LESS THAN(maxValue)定義的是一個最大的值

  範圍分區步驟:

  1)建立表空間

  建立三個表空間測試用

oracel 分區表不走normal索引_表空間

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    --指定表空間大小

oracel 分區表不走normal索引_字段_02

 2)建立表和對錶進行分區

oracel 分區表不走normal索引_字段_03

--創建訂單表
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 
)

oracel 分區表不走normal索引_表空間_04

  4)查詢分區數據

oracel 分區表不走normal索引_表空間_05

--查詢所有分區數據
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)

oracel 分區表不走normal索引_字段_06

 

  5)查看當前用户哪些表有分區

--查看當前用户有哪些表已分區
SELECT * from USER_TABLES where partitioned='YES'

  6)查看某個表有多少個分區

--查詢某個表有多少個分區
SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='表名';