oracle 表分区大小,Oracle 表分区 主键查询
chanong
|1 表分区概述允许用户将一个表拆分为多个分区
用户可以运行仅访问表中特定分区的查询。
将不同的分区存储在不同的磁盘上,以提高访问性能和安全性。
每个分区都可以单独备份和恢复
2 表分区的类型2.1 范围分区按表中一列或一组列的值的范围进行分区。
范围分割语法:
PARTITION BY RANGE (column_name)( PARTITION part1 VALUE LESS THAN(range1), PARTITION part2 VALUE LESS THAN(range2), [PARTITION partN VALUE LESS THAN(MAXVALUE)]); 范围分区示例
--示例1 CREATE TABLE Sales ( Product_ID varchar2 (5), Sales_Cost number (10) ) PARTITION BY RANGE (Sales_Cost) -- 根据Sales_Cost 创建分区( PARTITION P1 VALUES LESS THAN (1000), -- 下面包含销售成本所有产品值均为1000 PARTITION P2 VALUES LESS THAN (2000), PARTITION P3 VALUES LESS THAN (3000) );--示例2CREATE TABLE SALES2 (Product_ID VARCHAR2(5),SALES_DATE DATE NOT NULL,SALES_COST NUMBER(10) ) 按范围(SALES_DATE) 分区(分区P1 值小于(日期'2003-01-01'),分区P2 值小于(日期'2004-01-01'),分区P3 值小于(MAXVALUE) ); 例如:
创建表sales(product_id varchar2(20),sales_date date not null,sales_cost number(10)) 按范围分区(sales_cost) (分区p1 的值小于(1000),分区p2 的值小于(2000), (分区p3值小于maxvalue)---添加数据Insert into sales value('test001',sysdate,800);Insert into sales value('test001',sysdate,1200);Insert into sales value('test001', sysdate,1800 );插入销售值('test001',sysdate,122000);插入销售值('test001',to_date('2004-04-12','yyyy-mm-dd'), 122000) ; --查询分区数据select * from sales;select * from salespartition(p2);select * from salespartition(p3);--数据更新sales set sales_date=to_date('2004-04-12', 'yyyy- mm -dd ') where product_id='test001';2.2 哈希分区允许用户对没有逻辑范围的数据进行分区
通过对分区键运行HASH 函数来确定存储分区。
在不同分区之间均匀分布数据
语法
PARTITION BY HASH (column_name)PARTITIONSnumber_of_partitions;或PARTITION BY HASH (column_name)( PARTITION part1 [TABLESPACE tbs1], PARTITION part2 [TABLESPACE tbs2], PARTITION partN [TABLESPACE tbsN]); 示例1:
CREATE TABLE Employee( Employee_ID varchar2 (5), Employee_Name varchar2(20),Department varchar2 (10))PARTITION BY HASH (Department) -- 创建三个分区(分区D1, --分区名称分区D2, 分区D3 ); 示例2 :
CREATE TABLE EMPLOYEE( EMP_ID NUMBER(4), EMP_NAME VARCHAR2(14), EMP_ADDRESS VARCHAR2(15), DEPARTMENT VARCHAR2(10))PARTITION BY HASH (DEPARTMENT)PARTITIONS 4; 示例:
--创建表并创建分区create tableemployee( emp_idnumber(4), emp_name varchar2(14), descp varchar2(20) ) Partition by hash(emp_id) Partition 4; create tableemployee( emp_idnumber(4), emp_name varchar2 (14) ) ), descp varchar2(20) ) 按哈希分区(emp_id) (分区p1, 分区p2 ); --将数据插入员工值('001','test1','哈哈');员工插入值of('002','test1','haha1'); --查询分区数据select * from Employee Partition(p1) select * from Employee Partition(p2)2.3 列表分区允许用户将不相关的数据组织在一起
列表分割语法:
PARTITION BY LIST (column_name)( PARTITIONpart1 VALUES (values_list1), PARTITIONpart2 VALUES (values_list2), PARTITIONpartN VALUES (DEFAULT)); 示例:
CREATE TABLE Employee( Emp_ID number (4), Emp_Name varchar2 (14), Emp_Address varchar2 (15) -- 列出根据员工地址在表中创建的分区) PARTITION BY LIST (Emp_Address)( 分区北值('芝加哥'),分区西值('旧金山','洛杉矶'),分区南值('亚特兰大','达拉斯','休斯顿'),分区东值('纽约'),'波士顿' )); 例子:
--列表分区:创建表testlist(用户ID号(4),用户名varchar2(20))按列表(用户名)分割(分区p1值('wyg','wyg1'),分区p2值('wyg2', ') wyg3') );插入测试列表值(1001,'wyg');插入测试列表值(1002,'wyg1');插入测试列表值(1003,'wyg2') );insert into testlist value (1004,'wyg3');select * from testlist Partition(p2)2.4 复合分区范围分区和哈希分区或列表分区组合
复合分区语法:
PARTITION BY RANGE (column_name1)SUBPARTITION BY HASH (column_name2)SUBPARTITIONSnumber_of_partitions( PARTITION Part1 VALUE LESS THAN(range1), PARTITION Part2 VALUE LESS THAN(range2), PARTITION PartN VALUE LESS THAN(MAXVALUE)); 示例1:
CREATE TABLE SALES (PRODUCT_ID VARCHAR2 (5), SALES_DATE DATE NOT NULL, SALES_COST NUMBER (10))PARTITION BY RANGE (SALES_DATE) -- 在表的Sales_Date 列上创建范围分区。 SUBPARTITION BY HASH (Product_ID) -- 范围分区为表Product_ID 创建哈希子分区SUBPARTITIONS 5 -- 为每个范围分区创建5 个哈希子分区( PARTITION S1 VALUES LESS THAN (TO_DATE('01/April /2001', 'DD/MON) /YYYY')),分区S2 的值小于(TO_DATE('01/July/2001', 'DD/MON/YYYY')),分区S3 的值小于(TO_DATE(' 01/September/2001) ', 'DD/MON/YYYY)') )),分区S4 的值小于(MAXVALUE));示例2:
创建表sales (product_id varchar2(20), sales_cost number(5) ) 按范围分区(sales_cost) 按hash(product_id) 子分区子分区5(分区p1 的值小于(1000),分区p2 的值为( maxvalue) ); 3. 向分区表插入数据就像操作普通表一样,Oracle 自动将数据存储在相应的分区中。
在查询、修改或删除分区表时,可以显式指定要操作的分区。
4 分区维护操作包括添加分区。即在最后一个分区之后添加一个新分区。
ALTER TABLE Sales ADD PARTITION P4 VALUES LESS THAN (4000); 删除分区 删除指定分区也会删除该分区中的数据。
ALTER TABLE SALES DROP PARTITION P4;截断分区 删除指定分区中的所有记录
ALTER TABLE SALES TRUNCATE PARTITION P3;合并分区- 连接范围或复合分区的两个相邻分区。
ALTER TABLE Sales PARTITION S1, S2 INTO PARTITION S2;拆分分区- 将一个大分区中的记录拆分为两个分区
ALTER TABLE Sales Split 分区P2 AT (1500)INTO(分区P21、分区P22);








