Oracle分割槽表和索引

2022-11-18 18:12:02 字數 4690 閱讀 7516

什麼時候使用分割槽:

1、 大資料量的表,比如大於2gb。一方面2gb檔案對於32位os是乙個上限,另外備份時間長。

2、 包括歷史資料的表,比如最新的資料放入到最新的分割槽中。典型的例子:歷史表,只有當前月份的資料可以被修改,而其他月份只能read-only

oracle只支援以下分割槽:tables, indexes on tables, materialized views, and indexes on materialized views

分割槽對sql和dml是透明的(應用程式不必知道已經作了分割槽),但是ddl可以對不同的分割槽進行管理。

不同的分割槽之間必須有相同的邏輯屬性,比如共同的表名,列名,資料型別,約束;

但是可以有不同的物理屬性,比如pctfree, pctused, and tablespaces.

分割槽獨立性:即使某些分割槽不可用,其他分割槽仍然可用。

最多可以分成64000個分割槽,但是具有long or long raw列的表不可以,但是有clob or blob列的表可以。

可以不用to_date函式,比如:

alter session set nls_date_format='mm/dd/yyyy';

create table sales_range

(salesman_id number(5),

salesman_name varchar2(30),

sales_amount number(10),

sales_date date)

partition by range(sales_date)

(  partition sales_jan2000 values less than('02/01/2000'),

partition sales_feb2000 values less than('03/01/2000'),

partition sales_mar2000 values less than('04/01/2000'),

partition sales_apr2000 values less than('05/01/2000')

);partition key:最多16個columns,可以是nullable的

非分割槽的表可以有分割槽或者非分割槽的索引;

分割槽表可以有分割槽或者非分割槽的索引;

partitioning 方法:

range partitioning

list partitioning

hash partitioning

composite partitioning

composite partitioning:組合,以及 range-hash and range-list composite partitioning

range partitioning:

每個分割槽都有values less than子句,表示這個分割槽小於(<)某個上限,而大於等於(>=)前乙個分割槽的values less than值。

maxvalue定義最高的分割槽,他表示乙個虛擬的無限大的值。這個分割槽包括null值。

create table sales_range

(salesman_id number(5),

salesman_name varchar2(30),

sales_amount number(10),

sales_date date)

partition by range(sales_date)

(  partition sales_jan2000 values less than(to_date('01/02/2000','dd/mm/yyyy')),

partition sales_feb2000 values less than(to_date('01/03/2000','dd/mm/yyyy')),

partition sales_mar2000 values less than(to_date('01/04/2000','dd/mm/yyyy')),

partition sales_apr2000 values less than(to_date('01/05/2000','dd/mm/yyyy')),

partition sales_2000 values less than(maxvalue)

);插入資料:

insert into sales_range values(1,2,3,to_date('21-04-2000','dd-mm-yyyy'));

insert into sales_range values(1,2,3,sysdate);

選擇資料:

select * from sales_range;

select * from sales_range partition(sales_apr2000);

select * from sales_range partition(sales_mar2000);

select * from sales_range partition(sales_2000);

按照多個列分割槽:

create table sales_range1

(salesman_id number(5),

salesman_name varchar2(30),

sales_amount number(10),

sales_date date)

partition by range(sales_date, sales_amount)

(  partition sales_jan2000 values less than(to_date('01/02/2000','dd/mm/yyyy'),1000),

partition sales_feb2000 values less than(to_date('01/03/2000','dd/mm/yyyy'),2000),

partition sales_mar2000 values less than(to_date('01/04/2000','dd/mm/yyyy'),3000),

partition sales_apr2000 values less than(to_date('01/05/2000','dd/mm/yyyy'),4000),

partition sales_2000 values less than(maxvalue, maxvalue)

);insert into sales_range1 values(1,2,500, to_date('21/01/2000','dd/mm/yyyy'));

insert into sales_range1 values(2,3,1500, sysdate);

如果多個分割槽列的值衝突,則按照從左到右的優先順序。

list partitioning:

可以組織無序的,或者沒有關係的資料在相同的分割槽。

不支援多列的(multicolumn) partition keys,只能是乙個列。

default表示不滿足條件的都放在這個分割槽。

create table sales_list

(salesman_id number(5),

salesman_name varchar2(30),

sales_state varchar2(20),

sales_amount number(10),

sales_date date)

partition by list(sales_state)

(  partition sales_west values('california', 'hawaii'),

partition sales_east values ('new york', 'virginia', 'florida'),

partition sales_central values('texas', 'illinois'),

partition sales_other values(default)

);hash partitioning:

不可以作splitting, dropping or merging操作。但是可以added and coalesced.

當我們無法判斷有多少資料對映或者怎樣對映到各個分割槽時,可以使用這種方法。分割槽資料最好是2的冪,這樣可以平均分配資料。

create table sales_hash1

(salesman_id number(5),

salesman_name varchar2(30),

sales_amount number(10),

week_no number(2))

partition by hash(salesman_id)

partitions 4

store in (users, tools, test, tablespace1);  --表空間

create table sales_hash

(salesman_id number(5),

salesman_name varchar2(30),

sales_amount number(10),

week_no number(2))

partition by hash(salesman_id)

(  partition p1 tablespace users,

partition p2 tablespace system

);composite partitioning:

先按照range分割槽,每個子分割槽又按照list or hash分割槽。

Oracle分割槽表總結

create table emp empno number 4 ename varchar2 30 location varchar2 30 partition by list location partition p1 values 北京 partition p2 values 上海 天津 重慶 ...

Oracle分割槽表詳解

範圍和列表技術的組合,首先對錶進行範圍分割槽,然後用列表技術對每個範圍分割槽再次分割槽。與組合範圍 雜湊分割槽不同的是,每個子分割槽的所有內容表示資料的邏輯子集,由適當的範圍和列表分割槽設定來描述。注意 先一定要進行範圍分割槽 select from v option s order by s.pa...

分割槽表損壞

分割槽表為何會出故障 在分割槽表被破壞後,啟動系統時往往會出現 non system disk or disk error,replace disk and press a key to reboot 非系統盤或盤出錯 error loading operating system 裝入dos引導記錄...