表分區是一種思想,分區表示一種技術實現。當表的大小過G的時候可以考慮進行表分區,提高查詢效率,均衡IO。oracle分區表是oracle資料庫提供的一種表分區的實現形式。表進行分區後,邏輯上仍然是一張表,原來的查詢SQL同樣生效,同時可以採用使用分區查詢來優化SQL查詢效率,不至於每次都掃描整個表。 ...
表分區是一種思想,分區表示一種技術實現。當表的大小過G的時候可以考慮進行表分區,提高查詢效率,均衡IO。oracle分區表是oracle資料庫提供的一種表分區的實現形式。表進行分區後,邏輯上仍然是一張表,原來的查詢SQL同樣生效,同時可以採用使用分區查詢來優化SQL查詢效率,不至於每次都掃描整個表。
根據年: INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
根據月: INTERVAL(NUMTOYMINTERVAL(1,'MONTH'))
根據天: INTERVAL(NUMTODSINTERVAL(1,'DAY'))
根據時分秒: NUMTODSINTERVAL( n, { 'DAY'|'HOUR'|'MINUTE'|'SECOND'})
此時已經有普通表了,我創建了含相同欄位的分區表,把數據導入到分區表中,再把原表刪掉。
-- Create table(WMS_OPERATION_RECORD) create table DPHOMEWMS.WMS_OPERATION_RECORD_TMP ( ID NUMBER(19) not null, WAREHOUSE_ID NUMBER(19), ASN_ID NUMBER(19), PICK_TICKET_ID NUMBER(19), RELATION_CODE VARCHAR2(50), OPERATION_TYPE VARCHAR2(50), OPERATION_ID NUMBER(19), OPERATION_NAME VARCHAR2(50 CHAR), OPERATION_TIME TIMESTAMP(6), STATUS VARCHAR2(10), TYPE VARCHAR2(10), COUNTS NUMBER(10) )tablespace DPHOMEWMS_DATA PARTITION BY RANGE (OPERATION_TIME) interval (numtoyminterval(1, 'month')) STORE IN (DPHOMEWMS_DATA) ( partition OPERATION_RECORD_P01 values less than (TIMESTAMP' 2017-05-08 00:00:00') tablespace DPHOMEWMS_DATA ); -- Add comments to the columns comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.WAREHOUSE_ID is '倉庫id'; comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.ASN_ID is '收貨單id'; comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.PICK_TICKET_ID is '發貨單ID'; comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.RELATION_CODE is '關聯單據號(收貨單或發貨單的code)'; comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.OPERATION_TYPE is '操作類型'; comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.OPERATION_ID is '操作人ID'; comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.OPERATION_NAME is '操作人名稱'; comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.OPERATION_TIME is '操作時間'; comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.STATUS is '狀態'; comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.TYPE is '明細或者統計次數類型'; comment on column DPHOMEWMS.WMS_OPERATION_RECORD_TMP.COUNTS is '統計次數'; update DPHOMEWMS.WMS_OPERATION_RECORD set OPERATION_TIME = sysdate where OPERATION_TIME is null; insert into DPHOMEWMS.WMS_OPERATION_RECORD_TMP select * from WMS_OPERATION_RECORD; drop table DPHOMEWMS.WMS_OPERATION_RECORD; alter table DPHOMEWMS.WMS_OPERATION_RECORD_TMP rename to WMS_OPERATION_RECORD; alter table DPHOMEWMS.WMS_OPERATION_RECORD enable row movement;
(1)OPERATION_TIME是分區鍵,每一個月會自動創建一個分區,分區鍵不允許為null。
(2)alter table table_name enable row movement; 是指允許分區表的分區鍵是可更新,當某一行更新時,如果更新的是分區列,並且更新後的列值不屬於原來的這個分區,如果開啟了這個選項,就會把這行從這個分區中delete掉,並加到更新後所屬的分區,此時就會發生rowid的改變。相當於一個隱式的delete+insert,但是不會觸發insert/delete觸發器。如果沒有開啟這個選項,就會在更新時報錯。