数据库分区是每种数据库都需具备的关键功能之一几乎所有的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分区范围分区的一种增强功能可实现equisized范围分区的自动化创建的分区作为元数据只有最开始的分区是永久分区随着数据的增加会分配更多的部分并自动创建新的分区和本地索引
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表格通过PKFK关系从master表格继承相同的分区方案我们不需要把分区键存储在detail表格中通过关键词PARTITION BY REFERENCEdetail表格获得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);
分区建议器
Oracle g还提供了一个分区建议器可支持分区建议的生成类似于G中支持实物化视图实物化视图日志和索引的功能事实上分区建议器在Oracle g中是SQLAccessAdvisor的一部分这个建议器帮助生成建议并可以显示出推荐分区实施后可获得的效果它还会生成创建有效分区的脚本可手动通过SQL*Plus提交给Oracle或Enterprise Manager