oracle数据库分区表垂直分割,数据库分区 – 水平与垂直 – 归一化和行拆分之间的差异?...

分区是一个相当一般的概念,可以在许多情况下应用.当它考虑关系数据的分区时,通常是指逐行(水平)或逐列(垂直)分解表.

垂直分割(又称行分割)使用与数据库规范化相同的分割技术,但通常的术语(垂直/水平)数据分区是指物理优化,而归一化是概念层面的优化.

因为你要求一个简单的示范 – 假设你有一个这样的表:

create table data (

id integer primary key,

status char(1) not null,

data1 varchar2(10) not null,

data2 varchar2(10) not null);

垂直分割数据的一种方法:将其拆分如下:

create table data_main (

id integer primary key,

status char(1) not null,

data1 varchar2(10) not null );

create table data_rarely_used (

id integer primary key,

data2 varchar2(10) not null,

foreign key (id) references data_main (id) );

例如,当您的查询中很少需要列数据2时,可以应用这种分区.分区data_main将占用更少的空间,因此全表扫描将更快,并且更有可能适合DBMS页面缓存.缺点:当您必须查询所有数据列时,您实际上必须加入表,查询原始表格将会更昂贵.

请注意,您按照与规范化表格相同的方式拆分列.然而,在这种情况下,数据可能已经被归一化为3NF(甚至BCNF和4NF),但是您决定进一步将其拆分为物理优化的原因.

使用Oracle语法水平分区数据的一种方式:

create table data (

id integer primary key,

status char(1),

data1 varchar2(10),

data2 varchar2(10) )

partition by list (status) (

partition active_data values ( 'A' ),

partition other_data values(default)

);

这将告诉DBMS根据列状态的值将表数据内部存储在两个段(如两个表)中.例如,当您通常只查询一个分区的行,例如状态“A”行(让我们称之为活动行)时,可以应用这种分区数据的方法.像以前一样,完全扫描将更快(特别是如果只有少数活动行),活动行(以及其他行)可以连续存储(它们不会分散在它们与不同行的行共享的页面之间)状态值,并且活动行更有可能在页面缓存中.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值