再學學表的分區


     前一陣子一直在研究着Oracle的表分區的相關知識。在數據量不斷擴大的現在,分區技術是一種非常有效的提高效率的技術。

     限於業務的原因,我以前每次建立分區表的時候都喜歡用日期進行分區,每天一個range分區。但是突然有一天我遇到了一個很討厭的表,是一個對應關系表,只有產品和銷售品的對應關系,這個樣子的表是沒有辦法建立我最熟悉的range分區的,經過我查閱資料以后我發現hash分區是一個比較好的解決方案。

     hash分區就是對分區字段進行hash運算后,將數據均勻的分布在每一個分區上。hash,在大學的時候數據結構課上學過,意思是雜湊,聽這個名字就知道這個方法無比適合。

     新學的分區語句:

     

CREATE TABLE TEST PARTITION BY HASH(object_id) PARTITIONS 8 
 AS SELECT * FROM dba_objects;

     這樣子的話,系統會自動的生成8個分區,每一個分區的名字也是系統指定的:

     

     至於為什么從21開始分我還真的不理解,以后再說吧。

     可以查查每一個分區中有多少數據,range分區很好查,按分區列條件查就好了,這個hash不行,我查了一下,語句如下:

     

select count(1) from test partition(sys_p21);

     下面是這些個分區中的數據量:

     效果非常好。

     接下來就是看看數據的查詢效率了。首先要對這個表進行一次analyze。然后autotrace一下這個執行計划,如下:

    

      做實驗要有一個對照組,下面新建一個沒有分區的表,數據和test一樣,這個表叫做test_2,然后插入數據,然后analyze,然后看執行計划:

      

      效果非常非常好,對於那種亂七八糟的表這個分區方法簡直碉堡了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM