最近在作的一個項目,因爲涉及到數據量會在半年內破千萬條,考慮到數據量比較大,往後查詢起來會比較費時,因此考慮使用oracle的分區特性。oracle10g產品中的分區表分爲List,hash,range三個。oracle
通過分析,個人數據表Test_table_name中的SPCODE列的值是若干個固定不變的,並且該列不會被更新到。這樣它符合List分區的特性。因此決定使用list分區來作。有一點須要注意的是,咱們必須在創建表時進行分區,而不能在建完未分區的表後,添加分區。固然oracle提供了重定義表的方式能夠用來從新分區,但它會刪除全部數據。spa
創建分區表:code
create table test_table_name(spcode varchar2(8), time date, ……) partition list(spcode)(索引
partition 分區1 values('sp01'),產品
partition 分區2 values('sp02') hash
)it
可使用 select * from user_tab_partition 查看分區狀況io
在list分區後,假如還有新的分區鍵值進來,這時咱們有這種處理方式:table
1,使用默認分區。test
2,添加新的分區。
第一種的語法是 alter table test_table_name add partition 新分區3 values('sp03')
第二種的語法是 alter table test_table_name add partition 默認分區 values(default); -- default爲oracle關鍵字
這裏須要注意的是,若是一旦使用了默認分區,那麼在下次咱們想添加新分區時,有可能就會報錯。由於新的分區的值可能在默認分區中出現過。
在創建完分區後,這個時候,我能夠認爲創建了幾個表格(相似一個分區就是一個表),因此爲了提升查詢效率,咱們還可能會創建索引,在分區中分爲全局索引和分區索引。假如分區還會不斷的新增的話,建議使用分區索引,這樣不會在新增表時,破壞索引。
本地分區索引的語法:create index index_name on test_table_name(linkid) local;
或者 create index index_name on test_table_name(linkid) local (
partition 分區1, partition 分區2,…………
)
可使用 select * from user_ind_partitions 來查看,是否已經創建成功。