分区存储

来源:互联网 发布:什么软件挣钱快好提现 编辑:程序博客网 时间:2024/06/05 01:03

表分区的优缺点

表分区有以下优点:
1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
4、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。
缺点:
分区表相关:已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能。

分区存储要在创建表的时候使用,已经创建好的表不能分区。

范围分区:
使用VALUESLESSTHEN字句创建,最后一个分区可以使用关键字MAXVALUE,表示所有大于倒数第二个分区和空值的数据都存储到最后一个分区,最后一个分区使用MAXVALUE,表示该分区不设置上限。
CREATETABLEORDER_ACTIVITIES
(
ORDER_IDNUMBER(7)NOTNULL,
ORDER_DATEDATE,
TOTAL_AMOUNTNUMBER,
CUSTOTMER_IDNUMBER(7),
PAIDCHAR(1)
)
PARTITIONBYRANGE(ORDER_DATE)
(
PARTITIONORD_ACT_PART01VALUESLESSTHAN(TO_DATE('01- MAY -2003','DD-MON-YYYY'))TABLESPACEORD_TS01,
PARTITIONORD_ACT_PART02VALUESLESSTHAN(TO_DATE('01-JUN-2003','DD-MON-YYYY'))TABLESPACEORD_TS02,
PARTITIONORD_ACT_PART02VALUESLESSTHAN(MAXVALUE)TABLESPACEORD_TS03
)

列表分区:
该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。
CREATETABLEListTable
(
idINTPRIMARYKEY,
nameVARCHAR(20),
areaVARCHAR(10)
)
PARTITIONBYLIST(area)
(
PARTITION part1 VALUES ('guangdong','beijing')TABLESPACEPart1_tb,
PARTITION part2 VALUES ('shanghai','nanjing')TABLESPACEPart2_tb
);

散列分区:
这类分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。
散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。
--例子1
CREATETABLEHASH_TABLE
(
COLNUMBER(8),
INFVARCHAR2(100)
)
PARTITIONBYHASH(COL)
(
PARTITIONPART01TABLESPACEHASH_TS01,
PARTITIONPART02TABLESPACEHASH_TS02,
PARTITIONPART03TABLESPACEHASH_TS03
)
--简写:
CREATETABLEemp
(
empnoNUMBER(4),
enameVARCHAR2(30),
salNUMBER
)
PARTITIONBYHASH(empno)PARTITIONS8
STOREIN(emp1,emp2,emp3,emp4,emp5,emp6,emp7,emp8);

还可以使用以上三种分区进行组合分区:
CREATETABLESALES
(
PRODUCT_IDVARCHAR2(5),
SALES_DATEDATE,
SALES_COSTNUMBER(10),
STATUSVARCHAR2(20)
)
PARTITIONBYRANGE(SALES_DATE)SUBPARTITIONBYLIST(STATUS)
(
PARTITIONP1VALUESLESSTHAN(TO_DATE('2003-01-01','YYYY-MM-DD'))TABLESPACErptfact2009
(
SUBPARTITIONP1SUB1VALUES('ACTIVE')TABLESPACErptfact2009,
SUBPARTITIONP1SUB2VALUES('INACTIVE')TABLESPACErptfact2009
),
PARTITIONP2VALUESLESSTHAN(TO_DATE('2003-03-01','YYYY-MM-DD'))TABLESPACErptfact2009
(
SUBPARTITIONP2SUB1VALUES('ACTIVE')TABLESPACErptfact2009,
SUBPARTITIONP2SUB2VALUES('INACTIVE')TABLESPACErptfact2009
)
)
--例子2
createtabledinya_test
(
transaction_idnumberprimarykey,
item_idnumber(8)notnull,
item_descriptionvarchar2(300),
transaction_datedate
)
partitionbyrange(transaction_date)subpartitionbyhash(transaction_id)subpartitions3storein(dinya_space01,dinya_space02,dinya_space03)
(
partitionpart_01valueslessthan(to_date(‘2006-01-01’,’yyyy-mm-dd’)),
partitionpart_02valueslessthan(to_date(‘2010-01-01’,’yyyy-mm-dd’)),
partitionpart_03valueslessthan(maxvalue)
);


0 0