`

Oracle表分区和索引分区精彩汇总

阅读更多

 分区概述

    为了简化数据库大表的管理,例如在数据仓库中一般都是TB级的数量级.ORACLE8以后推出了分区选项.分区将表分离在若于不同的表空间上,用分而治之的方法来支撑元限膨胀的大表,组大表在物理一级的可管理性.将大表分割成较小的分区可以改善表的维护、备份、恢复、事务及查询性能。

分区的优点:

1、  增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用;

2、  减少关闭时间:如果系统故障只影响表的一部份分区,那么只有这部份分区需要修复,矿能比整个大表修复花的时间更少;

3、  维护轻松:如果需要得建表,独产管理每个公区比管理单个大表要轻松得多;

4、  均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能;

5、  改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快,在数据仓库的TP查询特别有用。

6、  分区对用户透明,最终用户感觉不到分区的存在。

 

 

 

create tablespace dw1

datafile 'D:\oracle\oradata\ora9\dw11.ora' size 50M

 

create tablespace dw2

datafile 'D:\oracle\oradata\ora9\dw21.ora' size 50M

 

一、按范围分区:固名思义就是按一定range来分区,看下面的例子:

SQL> set linesize 1000

SQL> create table niegc_part

  2  (

  3  part_id integer primary key,

  4  part_date date,

  5  part_dec varchar2(100)

  6  )

  7  partition by range(part_date)

  8  (

  9  partition part_01 values less than(to_date('2006-01-01','yyyy-mm-dd')) tablespace dw1,

 10  partition part_02 values less than(to_date('2007-01-01','yyyy-mm-dd')) tablespace dw2,

 11  partition part_03 values less than(maxvalue) tablespace dw1

 12  );

 

表已创建。

 

SQL>

SQL> insert into niegc_part values(1,to_date('2005-12-30','yyyy-mm-dd'),'less 20

06-01-01');

 

已创建 1 行。

 

SQL> commit;

 

提交完成。

 

SQL> insert into niegc_part values(2,to_date('2006-01-01','yyyy-mm-dd'),'equal 2

007-01-01');

 

已创建 1 行。

 

SQL> commit;

 

提交完成。

 

SQL> insert into niegc_part values(3,sysdate,'sysdate');

 

已创建 1 行。

 

SQL> commit;

 

提交完成。

 

SQL>

SQL>

SQL> select * from niegc_part partition(part_01);

 

   PART_ID PART_DATE  PART_DEC

---------- ---------- ----------------------------------------------------------

------------------------------------------

         1 30-12-05 less 2006-01-01

 

SQL>

 

相信只要对oracle 有点熟,都能知道上面的range分区的意思了.

 

两个字段以上的range分区大同小异,请看下面的例子:

create table niegc_part
(
part_id integer primary key,
part_date date,
part_dec varchar2(100)
)
partition by range(part_id,part_date)
(
partition part_01 values less than(1,to_date('2006-01-01','yyyy-mm-dd')) tablespace dw,
partition part_02 values less than(10,to_date('2007-01-01','yyyy-mm-dd')) tablespace dw,
partition part_03 values less than(maxvalue,maxvalue) tablespace dw
);
 

 

二、Hash分区(散列分区) 散列分区通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使行这些分区大小一致。如将part_id的数据根据自身的情况散列地存放在指定的三个表空间中:

create table niegc_part

(

part_id integer primary key,

part_date date,

part_dec varchar2(100)

)

partition by hash(part_id)

(

partition part_01  tablespace dw1,

partition part_02  tablespace dw2

);

 

系统将按part_id将记录散列地插入三个分区中,这里也就是二个不同的表空间中。

 

 

 

三、复合分区。根据范围分区后,每个分区内的数据再散列地分布在几个表空间中,这样我们就要使用复合分区。复合分区是先使用范围分区,然后在每个分区同再使用散列分区的一种分区方法,如将part_date的记录按时间分区,然后每个分区中的数据分三个子分区,将数据散列地存储在三个指定的表空间中:

 

create table niegc_part

(

part_id integer primary key,

part_date date,

part_dec varchar2(100)

)

partition by range(part_date) subpartition by hash(part_id)

subpartitions 2 store in(dw1,dw2)

(

partition part_01 values less than(to_date('2006-01-01','yyyy-mm-dd')) tablespace dw1,

partition part_02 values less than(to_date('2007-01-01','yyyy-mm-dd')) tablespace dw2,

partition part_03 values less than(maxvalue) tablespace dw1

);

 

 

先根据part_date进行范围分区,然后根据交易的ID将记录散列地存储在二个表空间中。

 

 

四、索引分区:

注意: 对某个字段已做了分区了,是不允许再建立索引分区的。这一点要非常注意。

 

全局索引建立时global子句允许指定索引的范围值,这个范围值为索引字段的范围值:

create index idx_part_id on niegc_part(part_dec)

global partition by range(part_dec)

(

partition idx_1 values less than('1000') tablespace dw,

partition idx_2 values less than(maxvalue) tablespace dw

)

 

 

局部索引分区的建立:(注意:表必须存在分区,此分区的个数必须和分区表的分区个数一样,不然是建立不起来的)

create index idx_part_id on niegc_part(part_dec)

local

(

partition idx_1 tablespace dw1,

partition idx_2 tablespace dw2</

分享到:
评论

相关推荐

    Oracle表分区和索引分区

    Oracle表分区和索引分区是提高大型表管理效率和查询性能的有效手段。通过合理设计分区策略,不仅可以显著提升系统的可用性和响应速度,还能简化维护工作,降低恢复时间和成本。对于处理大量数据的应用场景来说,掌握...

    Oracle 分区表 分区索引 索引分区详解

    虽然存储介质和数据处理技术的发展也很快,但是仍然不能满足用户的需求,为了使用户的大量的数据在读写操作和查询中速度更快,Oracle提供了对表和索引进行分区的技术,以改善大型应用系统的性能。

    oracle分区表分区索引.docx

    Oracle 分区表分区索引是 Oracle 数据库中的一种重要机制,它可以提高数据的存储和查询效率。下面将详细介绍 Oracle 分区表分区索引的类型、分类、创建方法和维护方式。 一、分区表和分区索引的概念 分区表是指将...

    Oracle 分区表 分区索引

    Oracle分区技术提供了强大的工具来管理和优化大型表和索引。通过合理选择分区策略和正确使用分区管理功能,可以显著提高数据库性能并降低管理复杂性。在实际应用中,应根据具体的业务需求和技术环境灵活运用这些分区...

    Oracle分区表和分区索引在VLDB中的研究.pdf

    "Oracle分区表和分区索引在VLDB中的研究" 本文研究了Oracle分区表和分区索引在VLDB(Very Large Databases)中的应用。分区表和分区索引是数据库管理中的关键技术之一,是VLDB中一个重要的性能提升机制。通过分析一...

    Oracle分区表及分区索引

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

    ORACLE分区与索引

    针对分区表,Oracle 提供了分区索引,它允许索引与分区策略相结合。例如,可以创建局部索引,每个分区都有自己的索引,或者创建全局索引,覆盖所有分区。局部索引通常在查询性能上有优势,而全局索引则适用于跨分区...

    oracle索引与分区索引介绍

    Oracle 索引与分区索引是 Oracle 数据库中两个重要的概念,它们都是为了提高查询性能和数据存储效率而设计的。在本文中,我们将详细介绍 Oracle 索引与分区索引的概念、特点、分类、创建方法、维护操作等方面的知识...

    分区索引,本地索引,全局索引的区别

    #### 一、Oracle分区索引概念及分类 在Oracle数据库中,分区索引是针对分区表的一种特殊索引类型,它可以显著提高对于大规模数据集的查询性能。根据索引是否与表的分区策略相匹配,分区索引可以分为两大类:本地...

    深入学习分区表及分区索引(详解oracle分区).docx

    以下是对Oracle分区表和分区索引的深入解析: 1. **何时使用分区**: - 当表的数据量超过2GB时,分区有助于避免32位操作系统下的文件大小限制,同时减少大规模数据的备份时间。 - 对于包含历史数据的表,如按月份...

    oracle表分区详解

    以上介绍了Oracle表分区的基本概念、优点、限制以及两种常见的分区类型——范围分区和列表分区,并给出了具体的创建示例。通过合理地使用表分区技术,可以有效地提高数据库系统的性能和可管理性。

    Oracle表分区详解

    Oracle数据库中的表分区是数据库管理的一种高级技术,它允许我们将大型表分解成更小、更易管理和查询的部分,从而提高数据存储和检索的效率。在本文中,我们将深入探讨Oracle表分区的各个方面,包括其重要性、类型、...

    ORACLE表自动按月分区步骤

    通过上述步骤,我们可以看到分区表会自动为新数据所在月份创建一个新的分区`SYS_P183`,并且会自动生成相应的分区索引。 #### 八、总结 本文详细介绍了如何在Oracle数据库中实现表的自动按月分区及本地索引的创建...

    Oracle分区表详解

    Oracle 的分区技术是一种用于管理和优化超大型表和索引的有效手段。通过将一个大型的表或者索引分割成多个较小且可管理的部分,分区技术能够显著提升数据库的性能、可用性和可维护性。 ##### 分区的作用: 1. **...

    oracle表分区详细讲解

    ### Oracle表分区详解 #### 一、表空间与分区表概念 **表空间**:在Oracle数据库中,表空间是一个或多个数据文件的集合。所有数据对象(如表、索引等)都存放在特定的表空间中。由于主要存放的是表,因此被称为...

    深入学习分区表及分区索引(详解oracle分区.docx

    总结来说,Oracle分区是一种强大的数据库管理工具,特别适合处理大数据量和历史数据存储的情况。通过合理选择分区策略,可以极大地提升数据处理的速度和系统的整体性能。然而,设计和实施分区策略需要深思熟虑,以...

    Oracle分区表和索引

    Oracle分区表和索引是一种高效的数据管理策略,尤其适用于处理大数据量和包含历史数据的表。当表的大小超过2GB,特别是在32位操作系统上,分区能够有效地提高查询性能,减少备份时间,并且便于管理和维护。Oracle...

Global site tag (gtag.js) - Google Analytics