1. 程式人生 > >Oracle建立表分割槽----範圍分割槽

Oracle建立表分割槽----範圍分割槽

建立分割槽是資料庫優化的一種手段,範圍分割槽是表分割槽的一種。

     建立範圍分割槽的關鍵字是"RANGE",建立該分割槽後,其中的資料可以根據分割槽鍵值指定的範圍進行分佈,當資料在範圍內均勻分佈時,效能最好。

例如我們選擇一個日期作為分割槽鍵,分割槽“AUG-2011”就會包括所有從01-AUG-2011到31-AUG-2011之間的分割槽鍵值(假設分割槽的範圍是從該月的第一天到該月的最後一天)。

       注意:當表結構採用範圍分割槽是,首先要考慮分割槽列應該符合範圍分割槽的方法;其次要考慮列的資料值的取值範圍;最後考慮列的邊界問題。

       下面通過一個例子來演示範圍分割槽的建立。

       題目:建立一個商品零售表,然後為該表按照銷售日期所在的季度建立4個分割槽。

       步驟如下:

       首先,在oracle資料庫管理工具PL/SQL Developer中新建一個SQL語句視窗,如下圖所示:

        接著,我們建立兩個表空間,分別是TBSP_1和TBSP_2,方法是在SQL視窗中輸入如下語句:

  1. CREATE TABLESPACE TBSP_1 DATAFILE 'D:\app\Administrator\oradata\orcl/TBSP_1.dbf' SIZE 10M;  
  2. CREATE TABLESPACE TBSP_2 DATAFILE 'D:\app\Administrator\oradata\orcl/TBSP_2.dbf' SIZE 10M;  

      執行該語句後,我們可以看到剛剛建立的兩個表空間。

     然後,我們在SQL語句視窗中建立一個表”商品零售表“,欄位分別代表銷售編號、銷售日期和商品名稱,並建立四個分割槽,語句如下:

  1. create table ware_retail_part  
  2. (  
  3.     id integer primary key,  
  4.     retail_date date,  
  5.     ware_name varchar2(50)  
  6. )  
  7. partition by range(retail_date)  
  8. (  
  9.    --2011年第一季度為par_1分割槽  
  10.    partition par_01 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace TBSP_1,  
  11.    --2011年第二季度為par_2分割槽  
  12.    partition par_02 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace TBSP_1,  
  13.    --2011年第三季度為par_3分割槽  
  14.    partition par_03 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace TBSP_2,  
  15.    --2011年第四季度為par_4分割槽  
  16.    partition par_04 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace TBSP_2  
  17. )  

執行以上語句,表區間建立完畢,這是我們可以看到分割槽已經在存放在表空間了,效果如下圖:

      在為商品零售表建立4個範圍分割槽後,下面向該表中插入若干條記錄。

  1. insert into ware_retail_part values(1,to_date('2011-01-20','yyyy-mm-dd'),'平板電腦');  
  2. insert into ware_retail_part values(2,to_date('2011-04-15','yyyy-mm-dd'),'小米3手機');  
  3. insert into ware_retail_part values(3,to_date('2011-07-25','yyyy-mm-dd'),'iWatch');  
  4. insert into ware_retail_part values(4,to_date('2011-12-17','yyyy-mm-dd'),'華碩筆記本');  

     建立完成後,我們查詢下銷售表裡是否有記錄。

        最後,我們擴充套件下,在向銷售零售表中插入若干條資料後,使用者可以通過分割槽表(即進行了分割槽的資料表)來查詢資料了,這種資料方式的查詢速度要比從整個表中查詢快的多,我們來舉個例子:

       假設我們這裡要查詢資料表ware_retail_part中分割槽par2_02中的全部記錄,SQL語句如下:

  1. select * from ware_retail_part partition(par_02);  

      這是我們可以查到該分割槽中的資料記錄。