為什么要分區(Partition)
1、一般一張表超過2G的大小,ORACLE是推薦使用分區表的。
2、這張表主要是查詢,而且可以按分區查詢,只會修改當前最新分區的數據,對以前的不怎么做刪除和修改。
3、數據量大時查詢慢。
4、便於維護,可擴展:11g 中的分區表新特性:Partition(分區)一直是 Oracle 數據庫引以為傲的一項技術,正是分區的存在讓 Oracle 高效的處理海量數據成為可能,在 Oracle 11g 中,分區技術在易用性和可擴展性上再次得到了增強。
5、與普通表的 sql 一致,不需要因為普通表變分區表而修改我們的代碼。
Oracle表分區分為四種類型,分別為范圍分區,散列分區,列表分區和復合分區。
1、范圍分區
就是根據數據庫表bai中某一字段的值的范圍來划分分區。
數據中有空值,Oracle機制會自動將其規划到maxvalue的分區中。
2、散列分區
根據字段的hash值進行均勻分布,盡可能地實現各分區所散列的數據相等。
散列分區即為哈希分區,Oracle采用哈希碼技術分區,具體分區如何由Oracle說的算,也可能我下一次搜索就不是這個數據了。
3、列表分區
列表分區明確指定了根據某字段的某個具體值進行分區,而不是像范圍分區那樣根據字段的值范圍來划分的。
4、復合分區
根據范圍分區后,每個分區內的數據再散列地分布在幾個表空間中,這樣我們就要使用復合分區。復合分區是先使用范圍分區,然后在每個分區同再使用散列分區的一種分區方法。
比如將part_date的記錄按時間分區,然后每個分區中的數據分三個子分區,將數據散列地存儲在三個指定的表空間中。
符合分區目前只能是范圍打頭,如:范圍-散列分區,范圍-列表分區
使用較多的目前感覺是范圍分區和列表分區。
下面練習下范圍分區的創建。
表已創建 目前的Oracle是不支持對已有表直接轉換成為分區表,可行的辦法是新建一個分區表將原表數據導入到分區表
新建表temp,接着之前的表結構來
因為linux服務器的時間有問題,更新下時間
首先是范圍分區,范圍分區在Oracle11g和之前的版本有了不同的特性,通過Interval-Partition特性來實現,簡單的說就是在之前的版本如果分區表用完了,就需要手動創建表分區,這種形式的創建存在風險,當我們的數據試圖插入不存在的分區時,Oracle會拒絕執行插入操作,導致db操作失敗,而Oracle作為一個成熟的dbms,自然需要解決這些問題,所以就出現了Interval-Partition,即間隔分區,它的作用就是當試圖插入的分區不存在時就以規定的間隔自動創建表分區,普通的表分區就不弄了,試一下Interval-Partition。
可以看到表分區已經在工作了,接下來將普通的范圍分區改為間隔分區,
重新設置下時間,然后插入新的數據
然后往分區表插入24號數據
另外也可以直接在創建表的時候指定間隔分區
partition by range (TIMER) interval (NUMTODSINTERVAL (5, ‘day’) ),效果是一樣的。
范圍分區的創建是比較簡單和直接的,通過partition by list(字段)創建,它相當於根據字段值創建一個單個的表分區,這對於一些根據特殊字段來存放數據的情況十分有用。