oracle 简单分区的学习

本文介绍了在Oracle数据库中如何使用分区表来提高数据管理和查询效率。包括适合使用分区的情况,如表大小超过2GB、含有历史数据及需要跨不同存储设备分布数据等。详细解释了三种主要的分区类型:范围分区、散列分区和列表分区,并提供了相应的创建示例。
根据官方文档,以下情况适合使用分区:
  • Tables greater than 2 GB should always be considered as candidates for partitioning.

     表的数据超过2GB的时候应该考虑使用分区表

  • Tables containing historical data, in which new data is added into the newest partition. A typical example is a historical table where only the current month's data is updatable and the other 11 months are read only.

     表中有历史数据,但是新的数据只进入新的分区

  • When the contents of a table must be distributed across different types of storage devices.

           当考虑将表中的数据放到不同的存储设备上时,应该使用分区表。

oracle根据分区的不同,分为简单分区和复合分区,简单分区的的学习如下:

1.简单分区
    
   以下是简单分区的几种方式
       
  范围分区(Range Partitioning)  
   根据键值所确定的范围将不同的值映射到不同的分区上。   
   语法如下:

 PARTITION BY RANGE (column[, column ]...)
   [ INTERVAL ( expr ) [ STORE IN ( tablespace [, tablespace]...) ]]
  ( PARTITION [ partition ]
    range_values_clause table_partition_description
      [, PARTITION [ partition ]
        range_values_clause table_partition_description
      ]...
  )

需要我们指定的有:

l column:分区依赖列(如果是多个,以逗号分隔);

l partition:分区名称;

l values less than:后跟分区范围值(如果依赖列有多个,范围对应值也应是多个,中间以逗号分隔);

l tablespace_clause:分区的存储属性,例如所在表空间等属性(可为空),默认继承基表所在表空间的属性。

      

   下面我们来创建一个分区表:
   
      
      SQL>  create table test_partition_range (id number,name varchar2(50))
  2   partition by range(id)(
  3   partition t_range_p1 values less than (100) tablespace founder,
  4   partition t_range_p2 values less than (200) tablespace founder01,
  5   partition t_range_p3 values less than (maxvalue) tablespace founder02
  6   );

        表已创建。
        
     SQL> select owner,table_name,tablespace_name,partitioned from dba_tables t where t.table_name=upper('test_partition_range');

OWNER                          TABLE_NAME             TABLESPACE_NAME   PAR-
------------------------------ ----------------------------- ------------------------- -------
FOUNDER                   TEST_PARTITION_RANGE                               YES
                              
      看到了一个和普通表不同的地方 ,没有对应的表空间。要查询创建分区的信息,可以通过以下查询    
      SQL> select table_name,partitioning_type,partition_count from dba_part_tables t  where  t.owner='FOUNDER';

TABLE_NAME                     PARTITI PARTITION_COUNT
------------------------------ ------- ---------------
TEST_PARTITION_RANGE           RANGE                 3

     SQL> select partition_name,high_value,tablespace_name,table_name from dba_tab_partitions where             table_name='TEST_PARTITION_RANGE' order by      partition_position;

PARTITION_NAME      HIGH_VALUE    TABLESPACE_NAME   TABLE_NAME
--------------- ---------------- ---------------- ------------------------- -----------------------------------

T_RANGE_P1         100                      FOUNDER                      TEST_PARTITION_RANGE
              
T_RANGE_P2         200                      FOUNDER01                   TEST_PARTITION_RANGE

T_RANGE_P3        MAXVALUE          FOUNDER02                   TEST_PARTITION_RANGE

  我们来看看oracle是如何给分区表分配空间的
                        
 SQL> select segment_name,partition_name,segment_type,tablespace_name,header_file,header_block from dba_segments t where                t.segment_name='TEST_PARTITION_RANGE';

   

   
散列分区(Hash Partitioning)
   根据oracle的hash算法按照键值将数据映射到不同的分区上。允许用户对不具有逻辑范围的数据进行分区,通过在分区键上执行HASH函   数决定存储的分区将数据平均地分布到不同的分区。  
   语法如下:
	    
       PARTITION BY HASH (column [, column ] ...)
        { individual_hash_partitions
         |hash_partitions_by_quantity
         }

 所以创建分区有两种方法:
  方法一:指定分区数量
   SQL>  create table dept2 (deptno number,deptname varchar2(32))
       2  partition by hash(deptno) partitions 4;
  方法二:指定分区的名字
   SQL> create table dept3 (deptno number,deptname varchar2(32))
      2      partition by hash(deptno)

      3      (partition p1 tablespace founder

      4      partition p2 tablespace founder02);

列表分区
   根据键值提供的值将数据映射到不同的分区上。
   
    PARTITION BY LIST (column)
(PARTITION [ partition ]
    list_values_clause table_partition_description
  [, PARTITION [ partition ]
        list_values_clause table_partition_description
  ]...
)

例子如下:
  create table sales_list
        (salesman_id number(5),

        salesman_name varchar2(30),
        sales_state varchar2(20),

        sales_amount number(10),
        sales_date date)

        partition by list (sales_state)
        (

        partition sales_west values ('California','Hawaii') tablespace x,
        partition sales_east values ('New York','Virginia') tablespace y,

        partition sales_central values ('Texas','Illinois') tablespace z,
        partition sales_other values(DEFAULT) tablespace o

        );




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值