Oracle分區表詳解
Oracle建議單表超過2G就需要進行分表,一萬數據大概3MB,單表最多分區為1024*1024-1個分區,我感覺夠我們使用了哈
廢話不多說,上示例,Oracle分表具體sql如下,大家可根據自己情況進行更改,具體理論后期有時間進行補充哈,希望可以幫助到各位大佬!
示例:
-- 創建臨時分區表
CREATE TABLE "MARKET"."STUDENT_2" (
"ID" NUMBER,
"NAME" VARCHAR2 (255),
"CREATE_TIME" TIMESTAMP (6),
PRIMARY KEY ("ID")
)
-- 根據那個字段進行分區 按月進行分區 按月自動分區
-- 按年year 、月month
-- 按天 NUMTODSINTERVAL(1, 'day') 、按周(7, 'day')
PARTITION BY RANGE ("CREATE_TIME") INTERVAL (numtoyminterval(1, 'month'))
(
-- than 分區的區間 只能有一個 分區存儲的為上一個月數據
PARTITION STUDENT_A2 VALUES LESS THAN (to_date('2022-01-01', 'yyyy-mm-dd'))
)
--查詢當前表有多少分區
select * from user_tab_partitions where table_name='STUDENT_2';
--查詢這個表的某個分區(SYS_P21)里的數據
select * from STUDENT_2 partition(STUDENT_A2);
-- 添加分區
alter table STUDENT_2 add PARTITION STUDENT_A3 VALUES LESS THAN (to_date('2022-02-01', 'yyyy-mm-dd'))
-- 刪除分區
ALTER TABLE STUDENT_2 DROP PARTITION STUDENT_A2;
-- 如果是全局索引,因為全局索引的分區結構和表可以不一致,若不一致的情況下,會導致整個全局索引失效,在刪除分區的時候,語句修改為:
ALTER TABLE STUDENT_2 DROP PARTITION STUDENT_A2 UPDATE GLOBAL INDEXES;
-- 查看分區索引
select * from user_ind_partitions;
-- 5. 為分區表設置索引全局索引
-- Create/Recreate indexes
create index student_2_create_time_1 on STUDENT_2 (CREATE_TIME);
-- 6. 設置分區索引
CREATE INDEX INX_TAB_PARTITION_COL1 ON STUDENT_2(NAME) LOCAL;
-- 刪除索引
DROP INDEX INX_TAB_PARTITION_COL1;
--6.1、查詢索引、表上在那些列上創建了分區:
SELECT * FROM USER_PART_KEY_COLUMNS;
-- 7. 作用是:允許分區表的分區鍵是可更新。
-- 當某一行更新時,如果更新的是分區列,並且更新后的列植不屬於原來的這個分區,
-- 如果開啟了這個選項,就會把這行從這個分區中 delete 掉,並加到更新后所屬的分區,此時就會發生 rowid 的改變。
-- 相當於一個隱式的 delete + insert ,但是不會觸發 insert/delete 觸發器。
alter table STUDENT_2 enable row movement;
-- 關閉自動分區
alter table t set interval();