此文從以下幾個方面來整理關於分區表的概念及操作:
(
表空間
是一個或多個數據文件的集合
分區表
當表中的數據量不斷增大
(
Oracle的表分區功能通過改善可管理性
分區功能能夠將表
什麼時候使用分區表
(
表分區有以下優點
缺點
分區表相關
(
一
范圍分區將數據基於范圍映射到每一個分區
當使用范圍分區時
例一
假設有一個CUSTOMER表
CREATE TABLE CUSTOMER
(
CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY
FIRST_NAME VARCHAR
LAST_NAME VARCHAR
PHONE VARCHAR
EMAIL VARCHAR
STATUS CHAR(
)
PARTITION BY RANGE (CUSTOMER_ID)
(
PARTITION CUS_PART
PARTITION CUS_PART
)
例二
CREATE TABLE ORDER_ACTIVITIES
(
ORDER_ID NUMBER(
ORDER_DATE DATE
TOTAL_AMOUNT NUMBER
CUSTOTMER_ID NUMBER(
PAID CHAR(
)
PARTITION BY RANGE (ORDER_DATE)
(
PARTITION ORD_ACT_PART
PARTITION ORD_ACT_PART
PARTITION ORD_ACT_PART
)
例三
CREATE TABLE RangeTable
(
idd INT PRIMARY KEY
iNAME VARCHAR(
grade INT
)
PARTITION BY RANGE (grade)
(
PARTITION part
PARTITION part
);
二
該分區的特點是某列的值只有幾個
例一
CREATE TABLE PROBLEM_TICKETS
(
PROBLEM_ID NUMBER(
DESCRIPTION VARCHAR
CUSTOMER_ID NUMBER(
DATE_ENTERED DATE NOT NULL
STATUS VARCHAR
)
PARTITION BY LIST (STATUS)
(
PARTITION PROB_ACTIVE VALUES (
PARTITION PROB_INACTIVE VALUES (
例二
CREATE TABLE ListTable
(
id INT PRIMARY KEY
name VARCHAR (
area VARCHAR (
)
PARTITION BY LIST (area)
(
PARTITION part
PARTITION part
);
)
三
這類分區是在列值上使用散列算法
散列分區為通過指定分區編號來均勻分布數據的一種分區類型
例一
CREATE TABLE HASH_TABLE
(
COL NUMBER(
INF VARCHAR
)
PARTITION BY HASH (COL)
(
PARTITION PART
PARTITION PART
PARTITION PART
)
簡寫
CREATE TABLE emp
(
empno NUMBER (
ename VARCHAR
sal NUMBER
)
PARTITION BY HASH (empno) PARTITIONS
STORE IN (emp
hash分區最主要的機制是根據hash算法來計算具體某條紀錄應該插入到哪個分區中
四
這種分區是基於范圍分區和列表分區
CREATE TABLE SALES
(
PRODUCT_ID VARCHAR
SALES_DATE DATE
SALES_COST NUMBER(
STATUS VARCHAR
)
PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS)
(
PARTITION P
(
SUBPARTITION P
SUBPARTITION P
)
PARTITION P
(
SUBPARTITION P
SUBPARTITION P
)
)
五
這種分區是基於范圍分區和散列分區
create table dinya_test
(
transaction_id number primary key
item_id number(
item_description varchar
transaction_date date
)
partition by range(transaction_date)subpartition by hash(transaction_id) subpartitions
(
partition part_
partition part_
partition part_
);
(
一
以下代碼給SALES表添加了一個P
ALTER TABLE SALES ADD PARTITION P
注意
以下代碼給SALES表的P
ALTER TABLE SALES MODIFY PARTITION P
二
以下代碼刪除了P
ALTER TABLE SALES DROP PARTITION P
在以下代碼刪除了P
ALTER TABLE SALES DROP SUBPARTITION P
注意
三
截斷某個分區是指刪除某個分區中的數據
ALTER TABLE SALES TRUNCATE PARTITION P
通過以下代碼截斷子分區
ALTER TABLE SALES TRUNCATE SUBPARTITION P
四
合並分區是將相鄰的分區合並成一個分區
ALTER TABLE SALES MERGE PARTITIONS P
五
拆分分區將一個分區拆分兩個新分區
ALTER TABLE SALES SBLIT PARTITION P
六
結合分區是將散列分區中的數據接合到其它分區中
ALTER TABLE SALES COALESCA PARTITION;
七
以下代碼將P
ALTER TABLE SALES RENAME PARTITION P
八
跨分區查詢
select sum( *) from
(select count(*) cn from t_table_SS PARTITION (P
union all
select count(*) cn from t_table_SS PARTITION (P
);
查詢表上有多少分區
SELECT * FROM useR_TAB_PARTITIONS WHERE TABLE_NAME=
查詢索引信息
select object_name
from v$segment_statistics
where statistic_name IN (
group by object_name
order by
select * from DBA_PART_TABLES
select * from ALL_PART_TABLES
select * from USER_PART_TABLES
select * from DBA_TAB_PARTITIONS
select * from ALL_TAB_PARTITIONS
select * from USER_TAB_PARTITIONS
select * from DBA_TAB_SUBPARTITIONS
select * from ALL_TAB_SUBPARTITIONS
select * from USER_TAB_SUBPARTITIONS
select * from DBA_PART_KEY_COLUMNS
select * from ALL_PART_KEY_COLUMNS
select * from USER_PART_KEY_COLUMNS
select * from DBA_SUBPART_KEY_COLUMNS
select * from ALL_SUBPART_KEY_COLUMNS
select * from USER_SUBPART_KEY_COLUMNS
select * from user_tables a where a
truncate table table_name;
alter table table_name truncate partition p
From:http://tw.wingwit.com/Article/program/Oracle/201311/18208.html