`
林维煜
  • 浏览: 11739 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于Oracle的几个分区

阅读更多
Oracle8i起,可以把一个表中的所有行为分为几个部分,这种表称为分区表。
1)优点
     改善表的查询性能,因为这样ORACLE可能只需搜索一个区(表的一部分)面不是整个表就可以完成查询。
     均衡I/O,可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。
     增强可用性,如果表的某个分区出现故障,表在其他分区的数据仍然可用
     维护方便,如果表的某个分区出现故障,需要修复数据,只修复该分区即可
     表更容易管理,因为分区表的数据存放在多个部分中,按分区加载各删除数据比在大表中加载和删除数据更容易
     备份和恢复操作会执行得更好,分区比被分区的表要小,备份各恢复分区的方法要比备份各恢复整个表的方法多。
2)建立分区表
1>范围分区
     可以使用 CREATE TABLE 命令的 PARTITION BY RANGE 子句:
CREATE TABLE bookshelf_range_part
(
title VARCHAR2(100) PRIMARY KEY,
publisher VARCHAR2(20),
categoryname VARCHAR2(20),
rating VARCHAR2(2),
CONSTRAINT catfk2 FOREIGN KEY (categoryname) REFERENCES category(categoryname)
PARTITION BY RANGE(categoryname)
(
PARTITION part1 VALUES LESS THAN('b') TABLESPACE part1_ts,
PARTITION part2 VALUES LESS THAN(MAXVALUE) TABLESPACE part2_ts));

     MAXVALUE 指定了最后一个分区交用来存储在前面几个分区不能存储的数据。
      可以建立多个分区,每个分区都有自己的上限值,对于每个分区来说,只需要指定最大值即可,范围的最小值同 ORACLE 隐含含义。
2)散列分区
      oracle8i 引入了散列分区,散列分区通过在分区键值-执行一个散列函数来决定数据的物理位置。在范围分区中,分区键值连续的值通常在相同的分区中,而散列分区中,连续的分区键值不一定分布在相同的分区中(一般均匀分布在不同的分区中):这样在潜在地减少了I/O争用的可能性。
CREATE TABLE bookshelf_hash_part
(
title VARCHAR2(100) PRIMARY KEY,
publisher VARCHAR2(20),
rating VARCHAR2(2),
CONSTRAINT cartfk_hash FOREIGN KEY(categoryname)
REFERENCES category(categoryname)
PARTITION BY HASH(categoryname) PARTITIONS 2 STOREIN(part1_ts,part2_ts));

     这各方法将建立 SYS_Pnnn 的名称的分区,在storein语句中指定的表空间的数据目可以不同 PARTITIAONS 中分区的数目。如果分区数目比指定的表空间数目多,分区将会以循环的方式分配到表空间中。
      可以指定分区的表名:
PARTITION BY HASH(categoryname)
(PARTITION part1 TABLESPACE part1_ts,
PARTITION part2 TABLESPACE part2_ts);

3>子分区
    oracle8i起,可以建立分区的分区,即子分区。子分区把范围分区和散列分区结合起来。
CAREATE TABLE bookshelf_range_hash_part
(
title VARCHAR2(100) PRIMARY KEY,
publisher VARCHAR2(20),
categoryname VARCHAR2(2),
rating VARCHAR2(2),
CONSTRAINT cartfk3 FOREIGN KEY(categoryname) REFERENCES category(categoryname) 
PARTITION BY RANGE(title)
SUBPARTITION BY HASH(categoryname)
SUBPARTITIONS 6
(
PARTITION part1 VALUES LESS THAN('m') TABLESPACE part1_ts,
PARTITION part2 VALUES LESS THAN(MAXVALUE) TABLESPACE part2_ts);
)

4>列表分区
     从oracle9i起,可以使用列表分区。在列表分区中,告诉ORACLE所有可能的值,并将分区指定到插入相应行的分区。
CREATE TABLE booksheif_list_part
(
title VARCHAR2(100) PRIMARY KEY,
publisher VARCHAR2(20),
categoryname VARCHAR2(20),
rating VARCHAR2(2),
CONSTRAINT cartfk4 FOREIGN KEY(categoryname) REFERENCES category(categoryname)
PARTITION BY LIST(categoryname)
(
PARTITION part1 VALUES ('adultfic','adultnf','adultref') TABLESPACE part1_ts,
PARTITION part2 VALUES('childrenfic','childrennf','childrenpic') TABLESPACE part1_ts
)
);

   在使用列表分区表时,如果INSERT到分区列的值不在分区的定义中,INSERT的操作将产生错误。
3)索引分区
1>局部索引
    索引可以按照表进行分区时所用的分区数来分区(局面部分区)。
CREATE INDEX bookshelf_list_category ON bookshelf_list_part(categoryname) LOCAL
(PARTITION part1 TABLESPACE part1_ndx_ts,
PARTITION part2 TABLESPACE part2_ndx_ts);

2>全局索引
    可以使用GLOBAL关键字建立包含多个分区值的全局索引。
CREATE INDEX bookshelf_list_category ON bookshelf_list_part(publisher) GLOBA;

    局部索引比全局索引容易管理,但全局索引进行唯一性检查的速度可能比局部索引快。
     全局索引建立时 global 子句允许指定索引的范围值,这个范围值为索引字段的范围值:
CREATE INDEX dinya_idx_t ON dinya_test(item_id)
GLOBAL PARTITION BY RANGE(item_id)
(
PARTITION idx_1 VALUES LESS THAN(1000) TABLESPACE dinya_space01,
PARTITION idx_2 VALUES LESS THAN(10000) TABLESPACE dinya_space02,
PARTITION idx_3 VALUES LESS THAN(MAXVALUE) TABLESPACE dinya_space03
);

    不能为散列分区或子分区建立全局索引。
分享到:
评论
2 楼 林维煜 2009-02-12  
陈漫钿 写道

维煜,怎么熟熟滴!

那天晚上那几张资料在这里都手敲了一遍
1 楼 陈漫钿 2009-02-12  
维煜,怎么熟熟滴!

相关推荐

    Oracle 分区表 分区索引

    在决定是否对表进行分区时,需要考虑以下几个因素: - **数据量大小**:当表中的数据量非常大时(通常超过2GB),分区可以帮助提高查询性能。 - **查询模式**:如果大多数查询都涉及对表的一部分数据进行操作,则...

    Oracle表分区详解(优缺点)

    分区表将一个大表在物理上分割成多个部分,每个部分称为一个分区,存储在不同的表空间中。这使得查询只需要针对特定的分区,而不是整个表,显著提高了查询速度。 表分区的主要作用在于优化性能和便于管理。性能方面...

    Oracle数据库表分区

    这样做有以下几个主要优点: 1. **增强可用性**:如果表的某一分区出现问题,其他分区仍可正常工作,保证了数据服务的连续性。 2. **维护便利**:针对特定分区进行数据修复或更新,而不是整个表,大大减少了维护...

    ORACLE-分区表的用法

    **示例一**:根据`CUSTOMER_ID`字段将`CUSTOMER`表划分为两个分区,每个分区大约包含100000条记录。 ```sql CREATE TABLE CUSTOMER ( CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY, FIRST_NAME VARCHAR2(30) NOT ...

    Oracle分区表及分区索引

    Oracle 分区表是指将一个大表分割成多个小表,每个小表称为一个分区,分区表的优点是可以提高查询性能、改善管理型、增强容错性等。 分区表的分类: 1. 范围分区(Range Partitioning) 范围分区是将数据基于范围...

    Oracle表分区 建表空间 创建用户

    ### Oracle表分区、建表空间与用户管理 #### 一、表空间的创建与管理 在Oracle数据库中,**表...以上是关于Oracle表分区的基本介绍和具体实现方式,通过合理运用这些分区技术,可以显著提升数据库的性能和管理效率。

    oracle分区表总结

    接下来,我们将通过几个具体的示例来深入了解每种分区类型的具体应用。 ##### 1. 范围分区 范围分区是根据列值的范围来确定数据存储的位置。例如,创建一个`sales`表,并按照`sale_date`列的值进行范围分区: ```...

    Oracle分区表用法

    分区表将逻辑上完整的表在物理上分割成多个部分,称为分区,每个分区存储在不同的表空间中。这样,查询时只需要扫描相关的分区,而不是整个表,从而提高查询速度。 2. **表分区的具体作用** - 性能提升:通过限制...

    oracle表分区详解

    每个分区覆盖了两个月的数据,并且最后一个分区 `ORD_ACT_PART99` 使用了 `MAXVALUE` 关键词来捕获所有日期晚于 `'01-MAR-2004'` 的数据。 2. 列表分区 列表分区是一种特殊的范围分区,其中分区键的值来自一个已知...

    oracle自动一年建立表分区.zip

    表分区的基本概念是将一个大表逻辑上分为多个部分,每个部分称为一个分区。这些分区可以基于不同的策略,如范围、列表、哈希或复合分区。在本例中,我们关注的是范围分区,尤其是时间范围分区,这通常用于按日期或...

    Oracle数据库分区管理.docx

    每个分区都有其独特的标识,并可以根据需求配置不同的存储属性。从数据库管理员(DBA)的角度,分区提供了管理和维护上的灵活性,例如,可以对不同分区进行独立的备份、恢复、优化或维护。而对应用程序来说,分区表...

    oracle中锁和表分区

    - 拆分分区:将一个分区拆分为多个分区,以便更好地匹配数据分布和查询模式。 理解并熟练掌握Oracle中的锁和表分区,对于提升数据库性能和确保数据安全性至关重要。无论是数据库管理员还是开发人员,都应该对这些...

    oracle表分区详细讲解

    除首个分区外,每个分区都有隐式下限值,即前一个分区的上限值。 3. 最高的分区通常定义为`MAXVALUE`,表示高于所有其他分区键值的不确定值。 通过以上内容可以看出,Oracle表分区是一种非常实用的技术,不仅可以...

    oracle分区ppt

    在“oracle分区ppt”中,我们可能会探讨以下几个关键知识点: 1. **分区类型**: - **范围分区**:根据列值的范围进行分区,例如,按照日期区间进行分区。 - **列表分区**:基于列值属于预定义的一组值进行分区。...

    oracle分区技术-大批量数据操作.ppt

    评估分区效果通常需要考虑以下几个方面: 1. **查询模式**:分析常见的查询是否能从分区中受益,例如,是否经常查询特定分区的数据。 2. **数据分布**:理解数据在不同分区间的分布情况,确保数据的平衡和分区的合理...

    Oracle系列_分区

    在学习和使用Oracle分区时,你需要了解以下几个关键概念: - **分区键(Partition Key)**:确定数据存储在哪个分区的列。 - **分区界限(Partition Boundary)**:范围分区时,定义分区的开始和结束值。 - **分区表...

    ORACLE表分区指引

    在Oracle数据库中,表分区的实现原理包括以下几个方面: 1. 分区架构:Oracle表分区支持不同的分区类型,包括范围分区、列表分区、散列分区和复合分区。每种分区方式都有其特定的应用场景,比如范围分区适合于时间...

    oracle9i分区.pdf

    - **分区(Partitioning)** 是指将表、索引或索引组织表进一步细分为更小的、独立的单元,每个这样的单元称为一个分区。每个分区有自己的名字,并且可以具有不同的存储属性。 - **分区键(Partition Key)** 是用于...

Global site tag (gtag.js) - Google Analytics