oracle中聚簇表的使用

oracle中聚簇表的使用

ID:34724960

大小:148.68 KB

页数:11页

时间:2019-03-10

oracle中聚簇表的使用_第1页
oracle中聚簇表的使用_第2页
oracle中聚簇表的使用_第3页
oracle中聚簇表的使用_第4页
oracle中聚簇表的使用_第5页
资源描述:

《oracle中聚簇表的使用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Oracle中ClusterTable的使用大家通常oracle中的cluster的理解是不准确的,经常和sqlserver中的clusterindex混淆。Cluster是存储一组table的一种方法,这些table共享同一数据块中的某些相同column,并把不同table在这一共享column上值相同的datarow存储到同一block上。在sqlserver中的clusterindex强制行根据indexkey按存储顺序存储,这一点和oracle中的IOT类似。从下图中我们可以清楚的看到cluster和非cluster的一组tabl

2、e的物理存储的区别。在cluster中,单个block上的数据可能来自多个table,概念上可以存储“预连接”的数据。单个table也可以使用cluster,即根据某些column按组存储数据。如图中,所有部门ID为20和110的部门信息和员工信息的数据都将存储在同一block。注意,这里存储的并不是排序的数据(那是IOT的任务),存储的是按部门ID分组集合的数据,是以heap的方式存储的。因此,部门20刚好和部门110相邻,而部门99和部门100相距很远(硬盘的物理位置)。当单个block放不下时,额外的block将链接到最初的bloc

3、k,来包容溢出的数据,这种方式和在IOT中溢出block非常相似。现在我们看看如何创建一个cluster。在cluster中创建一系列table是很简单的,对象存储定义如PCTFREE,PCTUSED,INITIAL都是和cluster相关的,而不是和table相关。这是因为在cluster中存储了若干table,每个table在同一个block中拥有不同的PCTFREE没有意义。SQL>createclustere_d_cluster2(deptidnumber(2))3size10244/Clustercreated这里首先创建了一个

4、indexcluster。这个cluster的key为deptid,在table中这个列可以不命名为deptid,但数据类型number(2)必须匹配。Size选项是用来告诉oracle预计有1024字节数据和每个cluserkey相关。Oracle将使用这个信息来计算每个block能容纳的最大clusterkey数目。因此size太高,在每一block将得到很少的key,并且将使用比需要的更多的空间;设置容量太低,将得到过多的数据连接,这将偏离使用cluster的目的。Size是cluster的重要参数。现在我们来创建clusterin

5、dex。在把数据放入之前,需要索引cluster。Clusterindex的作用是存储一个clusterkey,并且返回包含该key的block的地址。SQL>createindexe_d_cluster_idx2onclustere_d_cluster3/IndexcreatedClusterkey的index可以使用index所有的正常的存储参数,并且可以位于另一个tablespace。它是一个正常的index,能够索引到一个cluster,并且也包含一个完全null的条目。我们在cluster中创建table:SQL>createt

6、abledepartment2(deptidnumber(2)primarykey,3dnamevarchar2(14),4locvarchar2(13))5clustere_d_cluster(deptid);TablecreatedSQL>createtableemployee2(empidnumberprimarykey,3enamevarchar2(10),4jobvarchar2(10),5mgrnumber,6hiredatedate,7salnumber,8commnumber,9deptidnumber(2)referen

7、cesdepartment(deptid))10clustere_d_cluster(deptid);Tablecreated这里创建table与普通的table唯一的区别就是使用了cluster关键字,我们往table中装载数据:SQL>begin2forxin(select*fromscott.dept)3loop4insertintodepartment5values(x.deptno,x.dname,x.loc);6insertintoemployee7select*fromscott.emp8wheredeptno=x.dept

8、no;9endloop;10end;11/PL/SQLproceduresuccessfullycompleted我们可以看到目前table中装载了如下数据:SQL>select*fromde

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。