oracle中的分區表在系統中使用的頻率不小,在一些數據量大的系統中更是頻繁出現。html
提到分區表,首先就要理解下什麼是分區。其實所謂的分區簡單來講就是分區域,分區表就是將一張表分區域存放。oracle
那麼分區域中的區域又指的是哪裏?性能
那就是傳說中存放表的地方--->表空間。大數據
表空間:是一個或多個數據文件的集合,全部的數據對象都存放在指定的表空間中,但主要存放的是表, 因此稱做表空間。日誌
那麼爲何要把一張好好的表分開來存放。htm
當表中的數據量不斷增大,查詢數據的速度就會變慢,應用程序的性能就會降低,這時就應該考慮對錶進行分區。對象
表進行分區後,邏輯上表仍然是一張完整的表,只是將表中的數據在物理上存放到多個「表空間」(物理文件上),這樣查詢數據時,不至於每次都掃描整張表而只是從當前的分區查到所要的數據大大提升了數據查詢的速度。blog
前面提到了,通常數據量大的系統中分區表的使用是比較頻繁的。索引
那麼通常咱們何時要創建分區表呢?事件
一、表的大小超過2GB。
二、表中包含歷史數據,新的數據被增長到新的分區中。
使用表分區在解決大數據量表的基礎上, 還有下面幾個優勢:
一、改善查詢性能:對分區對象的查詢能夠僅搜索本身關心的分區,提升檢索速度。
二、加強可用性:若是表的某個分區出現故障,表在其餘分區的數據仍然可用;
三、維護方便:若是表的某個分區出現故障,須要修復數據,只修復該分區便可;
四、均衡I/O:能夠把不一樣的分區映射到不一樣磁盤以平衡I/O,改善整個系統性能。
通常的普通表若是要轉化爲分區表,要用到oracle提供的在線重定義表。
能夠參考文章:http://www.cnblogs.com/hfliyi/p/3626302.html
分區表中有一個概念,叫分區字段。那麼如何確認分區字段,一張分區表的分區字段是根據什麼來肯定的。
這裏咱們只聊兩種經常使用狀況。
1. 按範圍分區(好比說交易歷史表中的交易完成時間,日誌表中的事件發生時間)
2. 按列表分區(好比某張業務表中的狀態值)
多說一句:選取分區字段和選取索引字段同樣, 對這個字段的辨識度要求都比較高。
用數序上的極端分析來講,一個字段的辨識度最低就是這個字段只有一個值,那麼在這個上面作索引或者分區,那確定是狗血透了。
並且分區字段應該能保證表數據的分佈基本上是均勻的, 若是有100w條數據,有一個狀態列,只有一條狀態是inactive的,其餘都是active,那麼這個字段雖然能夠按列表分區,可是卻達不到咱們創建分區表的目的。