oracle表分区详解
从以下几个方面来整理关于分区表的概念及操作:
- 表空间及分区表的概念
- 表分区的具体作用
- 表分区的优缺点
1.表空间及分区表的概念
表空间:
表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表, 所以称作表空间。
分区表:
分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中。分区完全对应用透明。
Oracle的分区表可以包括多个分区,每个分区都是一个独立的段(SEGMENT),可以存放到不同的表空间中。查询时可以通过查询表来访问各个分区中的数据,也可以通过在查询时直接指定分区的方法来进行查询。
2.表分区的具体作用
Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务。
什么时候使用分区表:
1) 表的大小超过2GB。
2) 表中包含历史数据,新的数据被增加都新的分区中。
3.表分区的优缺点
优点:
1) 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
2) 增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
3) 维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
4) 均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。
缺点:
分区表相关,已经存在的表没有方法可以直接转化为分区表。不过Oracle 提供了在线重定义表的功能。
4.表分区的几种类型及操作方法
1.范围分区
范围分区将数据基于范围映射到每一个分区,这个范围是你在创建分区时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期。举个例子:你可能会将销售数据按照月份进行分区。
当使用范围分区时,请考虑以下几个规则:
1) 每一个分区都必须有一个VALUES LESS THEN子句,它指定了一个不包括在该分区中的上限值。分区键的任何值等于或者大于这个上限值的记录都会被加入到下一个高一些的分区中。
2)按时间划分,时间是自动可配的。CREATE TABLE ORDER_ACTIVITIES
(
ORDER_ID NUMBER(7)NOTNULL,
ORDER_DATE DATE,
TOTAL_AMOUNT NUMBER,
CUSTOTMER_ID NUMBER(7),
PAID CHAR(1)
)
PARTITION BY RANGE (ORDER_DATE)
(
PARTITION ORD_ACT_PART01 VALUESLESS THAN (TO_DATE('01- MAY -2003','DD-MON-YYYY'))TABLESPACEORD_TS01,
PARTITION ORD_ACT_PART02 VALUESLESS THAN (TO_DATE('01-JUN-2003','DD-MON-YYYY')) TABLESPACEORD_TS02,
PARTITION ORD_ACT_PART02 VALUESLESS THAN (TO_DATE('01-JUL-2003','DD-MON-YYYY')) TABLESPACEORD_TS03
)
例3:MAXVALUE
CREATE TABLE RangeTable
(
idd INT PRIMARYKEY ,
iNAME VARCHAR(10),
grade INT
)
PARTITION BY RANGE (grade)
(
PARTITION part1 VALUES LESS THEN (1000) TABLESPACE Part1_tb,
PARTITION part2 VALUES LESS THEN (MAXVALUE)TABLESPACE Part2_tb
);
2.列表分区:
该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。
例1
CREATE TABLE PROBLEM_TICKETS
(
PROBLEM_ID NUMBER(7)NOTNULLPRIMARY KEY,
DESCRIPTION VARCHAR2(2000),
CUSTOMER_ID NUMBER(7)NOTNULL,
DATE_ENTERED DATE NOT NULL,
STATUS VARCHAR2(20)
)
PARTITION BYLIST (STATUS)
(
PARTITION PROB_ACTIVE VALUES('ACTIVE') TABLESPACEPROB_TS01,
PARTITION PROB_INACTIVE VALUES ('INACTIVE')TABLESPACE PROB_TS02
hash分区最主要的机制是根据hash算法来计算具体某条纪录应该插入到哪个分区中,hash算法中最重要的是hash函数,Oracle中如果你要使用hash分区,只需指定分区的数量即可。建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀。
项目的实际应用。
在我们项目中,表分区主要是解决查询的问题。相对于sqlserver来说,表分区都不用更改任何代码。相对来说非常简单。如果数据量更大的话,还可以继续研究分表分库操作。