Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

25

积分

0

好友

3

主题
1#
发表于 2012-6-15 11:44:47 | 查看: 6513| 回复: 3
11G虚拟列的分区有什么优点么?
疑问:虚拟列上没有数据,为什么还要创建分区
4#
发表于 2012-6-27 10:08:01
有点像function index

回复 只看该作者 道具 举报

3#
发表于 2012-6-17 21:21:57
ODM FINDING:

基于虚拟列的分区


虚拟列值是通过计算函数或表达式得到的。
可以在 CREATE 或 ALTER 表操作中定义虚拟列。


虚拟列值实际上并未存储在磁盘上的表行中,而是根据需要进行计算。
像其它表列类型一样,可以对虚拟列进行索引,可以在查询、DML 和 DDL 语句中使用它们。
可在虚拟列上对表和索引进行分区,甚至可以收集它们的统计信息。



基于虚拟列的分区
如果某个表的列值是通过计算函数或表达式得到的,则这些列就称为虚拟列。可以在 CREATE 或 ALTER 表操作过程中指定这些列。虚拟列与其它实际表列共享相同的 SQL 名称空间,并与对其进行描述的基础表达式的数据类型相一致。可像其它表列一样在查询中使用这些列,因此可在 SQL 语句中提供简单、优美且一致的访问表达式机制。
虚拟列的值实际上并未存储在磁盘上的表行中,而是根据需要进行计算。描述虚拟列的函数或表达式应是明确且无掺杂的,即相同的输入值集应返回相同的输出值。
可以像使用任何其它表列一样使用虚拟列。可对虚拟列进行索引,可在查询、DML 和 DDL 语句中使用它们。可在虚拟列上对表和索引进行分区,甚至可以收集它们的统计信息。
可使用虚拟列分区对表的虚拟列上定义的键列进行分区。对逻辑分区对象的业务要求经常与现有列不一一对应。随着 Oracle Database 11g 的推出,分区功能得到了增强,可以在虚拟列上定义分区策略,因而可以更加全面地匹配业务要求。


基于虚拟列的分区:示例


CREATE TABLE employees
  (employee_id         number(6) not null, first_name varchar2(30),  
   last_name        varchar2(40) not null, email        varchar2(25),
   phone_number         varchar2(20), hire_date         date not null,
   job_id         varchar2(10) not null, salary        number(8,2),
   commission_pct number(2,2), manager_id         number(6),
   department_id number(4),
   total_compensation as (salary *( 1+commission_pct))
   )
    PARTITION BY RANGE (total_compensation)
     (
       PARTITION p1 VALUES LESS THAN (50000),
       PARTITION p2 VALUES LESS THAN (100000),
       PARTITION p3 VALUES LESS THAN (150000),
       PARTITION p4 VALUES LESS THAN (MAXVALUE)
     );



基于虚拟列的分区:示例
请考虑以上的示例。EMPLOYEES 表是使用标准的 CREATE TABLE 语法创建的。total_compensation 列是一个虚拟列,其值的计算方式为:将 salary 的值与 commission_pct 加 1 之后的值相乘。下一个语句将 total_compensation(虚拟列)声明为 EMPLOYEES 表的分区键。
如果分区键上的谓词属于以下类型之一,则将对虚拟列分区键执行分区修剪:
等式或 Like
列表
范围
扩展分区名称
如果两个表之间存在联接操作,则优化程序将确定智能化分区联接(完全或部分)的适用时间,决定是否使用智能化分区联接,并在决定使用时正确注释该联接。这既适用于串行情况也适用于并行情况。
为了确定完全智能化分区联接,优化程序将依赖于对两个对象的均匀分区的定义;此定义包括表据以分区的虚拟表达式的等同性。

回复 只看该作者 道具 举报

2#
发表于 2012-6-15 13:44:31
virtual column 只存储元定义,所以节约disk space

分区取决于你的业务需求,如果把多个列的运算结果做为分区键不是很好么?

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-15 22:40 , Processed in 0.052023 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569