知识大全 Oracle数据库中分区表的操作方法

Posted

篇首语:会当凌绝顶,一览众山小。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle数据库中分区表的操作方法相关的知识,希望对你有一定的参考价值。

Oracle数据库中分区表的操作方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在大量业务数据处理的项目中 可以考虑使用分区表来提高应用系统的性能并方便数据管理 本文详细介绍了分区表的使用     在大型的企业应用或企业级的数据库应用中 要处理的数据量通常可以达到几十到几百GB 有的甚至可以到TB级 虽然存储介质和数据处理技术的发展也很快 但是仍然不能满足用户的需求 为了使用户的大量的数据在读写操作和查询中速度更快 Oracle提供了对表和索引进行分区的技术 以改善大型应用系统的性能      使用分区的优点     ·增强可用性 如果表的某个分区出现故障 表在其他分区的数据仍然可用     ·维护方便 如果表的某个分区出现故障 需要修复数据 只修复该分区即可     ·均衡I/O 可以把不同的分区映射到磁盘以平衡I/O 改善整个系统性能     ·改善查询性能 对分区对象的查询可以仅搜索自己关心的分区 提高检索速度     Oracle数据库提供对表或索引的分区方法有三种     ·范围分区    ·Hash分区(散列分区)    ·复合分区    下面将以实例的方式分别对这三种分区方法来说明分区表的使用 为了测试方便 我们先建三个表空间     create tablespace dinya_space   datafile /test/demo/oracle/demodata/dinya dnf size M  create tablespace dinya_space   datafile /test/demo/oracle/demodata/dinya dnf size M  create tablespace dinya_space   datafile /test/demo/oracle/demodata/dinya dnf size M     分区表的创建     范围分区    范围分区就是对数据表中的某个值的范围进行分区 根据某个值的范围 决定将该数据存储在哪个分区上 如根据序号分区 根据业务记录的创建日期进行分区等     需求描述 有一个物料交易表 表名 material_transactions 该表将来可能有千万级的数据记录数 要求在建该表的时候使用分区表 这时候我们可以使用序号分区三个区 每个区中预计存储三千万的数据 也可以使用日期分区 如每五年的数据存储在一个分区上     根据交易记录的序号分区建表     SQL> create table dinya_test   (   transaction_id number primary key    item_id number( ) not null    item_description varchar ( )    transaction_date date not null   )   partition by range (transaction_id)   (   partition part_ values less than( ) tablespace dinya_space    partition part_ values less than( ) tablespace dinya_space    partition part_ values less than(maxvalue) tablespace dinya_space    );  Table created     建表成功 根据交易的序号 交易ID在三千万以下的记录将存储在第一个表空间dinya_space 中 分区名为:par_ 在三千万到六千万之间的记录存储在第二个表空间     dinya_space 中 分区名为 par_ 而交易ID在六千万以上的记录存储在第三个表空间dinya_space 中 分区名为par_     根据交易日期分区建表     SQL> create table dinya_test   (   transaction_id number primary key    item_id number( ) not null      item_description varchar ( )    transaction_date date not null   )   partition by range (transaction_date)   (   partition part_ values less than(to_date( yyyy mm dd ))  tablespace dinya_space    partition part_ values less than(to_date( yyyy mm dd ))  tablespace dinya_space    partition part_ values less than(maxvalue) tablespace dinya_space    );  Table created     这样我们就分别建了以交易序号和交易日期来分区的分区表 每次插入数据的时候 系统将根据指定的字段的值来自动将记录存储到制定的分区(表空间)中     当然 我们还可以根据需求 使用两个字段的范围分布来分区 如partition by range ( transaction_id transaction_date) 分区条件中的值也做相应的改变 请读者自行测试      Hash分区(散列分区)    散列分区为通过指定分区编号来均匀分布数据的一种分区类型 因为通过在I/O设备上进行散列分区 使得这些分区大小一致 如将物料交易表的数据根据交易ID散列地存放在指定的三个表空间中     SQL> create table dinya_test   (   transaction_id number primary key    item_id number( ) not null    item_description varchar ( )    transaction_date date   )   partition by hash(transaction_id)   (   partition part_ tablespace dinya_space    partition part_ tablespace dinya_space    partition part_ tablespace dinya_space    );  Table created     建表成功 此时插入数据 系统将按transaction_id将记录散列地插入三个分区中 这里也就是三个不同的表空间中      复合分区    有时候我们需要根据范围分区后 每个分区内的数据再散列地分布在几个表空间中 这样我们就要使用复合分区 复合分区是先使用范围分区 然后在每个分区内再使用散列分区的一种分区方法 如将物料交易的记录按时间分区 然后每个分区中的数据分三个子分区 将数据散列地存储在三个指定的表空间中     SQL> create table dinya_test   (   transaction_id number primary key    item_id number( ) not null    item_description varchar ( )    transaction_date date   )   partition by range(transaction_date)subpartition by hash(transaction_id)   subpartitions store in (dinya_space dinya_space dinya_space )   (   partition part_ values less than(to_date( yyyy mm dd ))    partition part_ values less than(to_date( yyyy mm dd ))    partition part_ values less than(maxvalue)   );  Table created     该例中 先是根据交易日期进行范围分区 然后根据交易的ID将记录散列地存储在三个表空间中      分区表操作    以上了解了三种分区表的建表方法 下面将使用实际的数据并针对按日期的范围分区来测试分区表的数据记录的操作      插入记录     SQL> insert into dinya_test values( BOOKS sysdate);   row created   SQL> insert into dinya_test values( BOOKS sysdate+ );   row created     SQL> insert into dinya_test values( BOOKS to_date( yyyy mm dd ));   row created   SQL> insert into dinya_test values( BOOKS to_date( yyyy mm dd ));   row created   SQL> insert into dinya_test values( BOOKS to_date( yyyy mm dd ));   row created   SQL> insert into dinya_test values( BOOKS to_date( yyyy mm dd ));   row created   SQL> mit;  Commit plete   SQL>    按上面的建表结果 年前的数据将存储在第一个分区part_ 上 而 年到 年的交易数据将存储在第二个分区part_ 上 年以后的记录存储在第三个分区part_ 上      查询分区表记录     SQL> select * from dinya_test partition(part_ );  TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE      BOOKS : :   BOOKS : :  SQL>  SQL> select * from dinya_test partition(part_ );  TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE      BOOKS    BOOKS   SQL>  SQL> select * from dinya_test partition(part_ );  TRANSACTION_ID ITEM_ID ITEM_DESCRIPTION TRANSACTION_DATE      BOOKS    BOOKS   SQL>    从查询的结果可以看出 插入的数据已经根据交易时间范围存储在不同的分区中 这里是指定了分区的查询 当然也可以不指定分区 直接执行select * from dinya_test查询全部记录     在也检索的数据量很大的时候 指定分区会大大提高检索速度      更新分区表的记录     SQL> update dinya_t cha138/Article/program/Oracle/201311/18389

相关参考