ORACLE创建cluster表

ORACLE创建cluster表,说是话我觉得这个没什么用,很少用到吧。


创建cluster表:
1、创建一个集群
create cluster my_cls (deptno number(2));
这个时候数据库做了什么?定义了一个对象,名字是my_cls,cluster key是deptno


create index my_cls_idx on cluster my_cls;
创建cluster index的目的是拿到一个index值,然后返回包含这个键的块的块地址! 。比如说我要获取deptno=20部门的数据时,oracle就会扫描这个索引,确定deptno=10这些数据的块地址


create table c_dept cluster my_cls(deptno) as select * from dept;

创建表,并且把表和集群my_cls使用deptno关联起来,存储数据的时候就不是14条记录存储在一起,而且根据deptno分类,如deptno=10的,放到一个数据块里面,deptno=20的,放到另外一个数据块里面

create table c_emp cluster my_cls(deptno) as select * from emp;
再次创建表又和my_cls关联起来,那么存储数据的时候根据emp中的deptno分类存储,从索引my_cls_idx中知道了deptno=10的那些数据放到了xx块上面,然后自己在emp中deptno为10的数据也放到那个数据块中







--查看c_dept表中的数据放到哪个块上面
select dbms_rowid.rowid_block_number(rowid),count(*) from c_dept
group by dbms_rowid.rowid_block_number(rowid);
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*)
------------------------------------ ----------
303 1
299 1
301 1
302 1

发现,c_dept中的数据不是放到一个块的,而是放到4个块上面

--同样查看c_emp的数据分布


--查看一下c_dept表的那些记录在那个块上面
SQL> /

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*)
------------------------------------ ----------
303 6
301 3
302 5

发现他们都是在同一个数据块

select * from c_dept where dbms_rowid.rowid_block_number(rowid)=303; --查看一下c_dept表中存放在303块上的数据有哪些
select * from c_emp where dbms_rowid.rowid_block_number(rowid)=303; --这些数据应该是deptno为多少的数据


===============================
验证性能上的提升
set autot traceo

select * from c_emp,c_dept where c_emp.deptno=c_dept.deptno and c_emp.deptno=10;
这个语句多执行几次,目的是消除其它池对他的影响

alter system flush buffer_cache;

select * from c_emp,c_dept where c_emp.deptno=c_dept.deptno and c_emp.deptno=10;
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
5 consistent gets
2 physical reads
0 redo size
1194 bytes sent via SQL*Net to client
419 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
3 rows processed

使用相同的办法对比普通表的情况











  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knuuy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值