当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。
假设你的表名字叫 date_sale
那么首先把 表 暂时修改名字 修改为 date_sale2
然后创建分区表 date_sale
然后 INSERT INTO date_sale SELECT FROM date_sale2
最后 DROP TABLE date_sale2
数据库分区是每种数据库都需具备的关键功能之一 几乎所有的Oracle数据库都使用分区功能来提高查询的性能 Oracle g分区功能可以简化数据库的日常管理维护工作 大大减轻了DBA(数据库设计和管理工程师)的工作负担
Oracle g中提供的新功能增添了更多的数据库分区功能选择 使分区功能在使用和维护上变得更加灵活;同时 Oracle g也提供更多的分区功能选择
Oracle 版最早推出了表格的分区功能 使Oracle成为了第一个支持物理分区的RDBMS供应商 SQLServer( )和DB 都只支持逻辑分区(使用UNION ALL视图) 而SQL Server 并不直接支持物理分区(需通过分区功能) Oracle的分区功能选择很受用户群的欢迎 因为分区功能能够改善应用程序的性能 可管理性和可用性 其中最重要的是DSS应用程序 由于该功能受到广泛的喜爱 因此每次发布新版本都会有功能上的不断提高
下面的表格列举了随版本更新而不断提高的分区功能(高级)
分区功能类型
现在让我们简单的讨论一下以上每个分区功能的特性
范围分区 数据根据分区键值范围指定进行分布 比如 如果我们选择一个日期列作为分区键 分区 JAN 就会包括所有包含从 JAN 到 JAN 之间的分区键值(假设分区的范围是从这个月的第一天到这个月的最后一天)
散列分区 将散列算法用于分区键来确定指定行所在的分区 这个分区方法能够保持I/O平衡 但是不可用于范围查询或不等式查询
列表分区 数据根据分区键值列表指定进行分布 这个分区方法对于离散的列表非常有用 如地区 国家等
组合分区 结合 个数据分区方法可以成为一个组合分区方法 先用第一个数据分布方法对表格进行分区 然后再用第二个数据分区方法对每个分区进行二次分区 组合分区方法有以下组合
组合范围散列分区 组合范围列表分区 组合范围范围分区 组合列表范围分区 组合列表列表分区 组合列表散列分区
G支持对索引组织表(索引和数据一起的表格)进行范围分区 列表分区或散列分区 但是不支持对其进行组合分区
Interval分区 G版本引入的interval分区范围分区的一种增强功能 可实现equi sized范围分区的自动化 创建的分区作为元数据 只有最开始的分区是永久分区 随着数据的增加会分配更多的部分 并自动创建新的分区和本地索引
SQL>CREATETABLESALES_PART
(TIME_ID NUMBER REGION_ID NUMBER
ORDER_ID NUMBER
ORDER_DATE DATE
SALES_QTY NUMBER( )
SALES_AMOUNT NUMBER( )
)
PARTITIONBY RANGE (ORDER_DATE)
INTERVAL (NUMTOYMINTERVAL( month )
(PARTITION p_first VALUES LESS THAN ( JAN );
Numtoyminterval功能把数字转换成 INTERVAL YEAR TO MONTH文字( YEAR or MONTH )
进行Interval分区的表格有传统的范围部分和自动生成的interval部分 进行范围分区的表格可以通过使用ALTER TABLE命令的SETINTERVAL选项扩展成为Interval分区的表格
外键分区 分区方案的引入是以相关表格通过相同的分区策略获得好处作为前提设想的 Detail表格通过PK FK关系从master表格继承相同的分区方案 我们不需要把分区键存储在detail表格中 通过关键词 PARTITION BY REFERENCE detail表格获得master表格的分区方案
虚拟列分区 在之前的Oracle版本里 只有分区键存在与表格中才可以实现对表格的分区功能 而Oracle G的新功能 虚拟列 打破了这一限制 允许通过使用表格中的一列或多列的表述确定分区键 而虚拟列只作为元数据存储
例如 在表格ACCOUNTS中添加一个虚拟列
SQL>CREATE TABLE ACCOUNTS
(acc_no number( ) not null
acc_name varchar ( ) not null
acc_loc varchar ( )
acc_branch number( ) generated always as (to_number(substr(to_char(acc_no) )));
使用虚拟列作为分区键
SQL>CREATE TABLE accounts
(acc_no number( ) not null
acc_name varchar ( ) not null
acc_loc varchar ( )
acc_branch number( ) generated always as (to_number(substr(to_char(acc_no) )))
partition by list (acc_branch);
分区建议器
lishixinzhi/Article/program/Oracle/201311/18976
Hash Global分区索引介绍
HASH-Partitioned Global索引是Oracle 10g开始提供的新特性。而在以前的版本中
,Oracle只支持Range-Partitioned Global索引。HASH-Partitioned Global索引的好处如下:
比Range-Partitioned Global索引易于实施。HASH-Partitioned Global索引是根据
索引字段值,通过Oracle内部的HASH算法自动均匀散列到定义的分区中。而
Range-Partitioned Global索引需要根据索引字段值的范围进行分区,因此实施和
维护的难度都大。
HASH-Partitioned Global索引适合于在并发量、吞吐量很大的交易系统(OLTP)
中,对某些字段的访问冲突。尤其是sequence字段值。
HASH-Partitioned Global索引适合于大批量的数据查询。HASH-Partitioned Global索引不仅可以提供分区之间的并行查询,
而且在分区内也可进行并行查询的处理。
建立分区索引必须指定表空间,并且指定的表空间要与数据表空间分开,
这样便于管理,同时尽可能分开索引和数据的IO访问,提高效率
from askmaclean@[toc]
其它类型的表设计可以看博客: >
查询的时候按table来查,一个表的所有分区都属于table。
但每个分区都是单独的segment,如果查询限制了分区键,那么查询只落在特定的segment,而segment在底层对应的数据块是不同的,这样可以减少数据的访问。
以上就是关于如何使用Oracle数据库分区表全部的内容,包括:如何使用Oracle数据库分区表、oracle 分区表疑问、深入浅出Oracle11g分区功能等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)