`
wb284551926
  • 浏览: 537535 次
文章分类
社区版块
存档分类
最新评论

Oracle聚簇索引的使用方式

 
阅读更多

      很多初学者,在接触Oracle数据库后,都会很疑惑Oracle聚簇索引是什么,如何使用Oracle聚簇索引,Oracle散列聚簇又与Oracle聚簇索引有什么关系。本文针对这3个问题结合相关资料,给出了点看法。

      1. 什么是聚簇

      聚簇是根据码值找到数据的物理存储位置,从而达到快速检索数据的目的。Oracle聚簇索引的顺序就是数据的物理存储顺序,叶节点就是 数据节点。非聚簇索引的顺序与数据物理排列顺序无关,叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。一个表最多只能有一个聚簇索引。

      2. 使用 Oracle聚簇索引

      聚簇是一种存储表的方法,这些表密切相关并经常一起连接进磁盘的同一区域。例如,表 BOOKSHELF 和BOOKSHELF_AUTHOR 数据行可以一起插入到称为簇(Cluster)的单个区域中,而不是将两个表放在磁盘上的不同扇区上。簇键(Cluster Key)可以是一列或多列,通过这些列可以将这些表在查询中连接起来(例如,BOOKSHELF表和BOOKSHELF_AUTHOR表中的 Title列)。为了将表聚集在一起,必须拥有这些将要聚集在一起的表。

      下面是create cluster命令的基本格式:

      create cluster (column datatype [, column datatype]...) [other options];

      cluster的名字遵循表命名约定,column datatype是将作为簇键使用的名字和数据类型。column的名字可以与将要放进该簇中的表的一个列名相同,或者为其他有效名字。下面是一个例子:

      create cluster BOOKandAUTHOR (Col1 VARCHAR2(100));

      这样就建立了一个没有任何内容的簇(象给表分配了一块空间一样)。COL1的使用对于簇键是不相干的,不会再使用它。但是,它的定义应该与要增加的表的主键相符。接下来,建立包含在该簇中的表:
      create table BOOKSHELF
      (Title VARCHAR2(100) primary key,
      Publisher VARCHAR2(20),
      CategoryName VARCHAR2(20),
      Rating VARCHAR2(2),
      constraint CATFK foreign key (CategoryName) references CATEGORY(CategoryName)
      )
      cluster BOOKandAUTHOR(Title);

      在向BOOKSHELF表中插入数据行之前,必须建立一个Oracle聚簇索引:

      create index BOOKandAUTHORndx on cluster BOOKandAUTHOR;

      在上面的create table语句中,簇BOOKandAUTHOR(Title)子句放在表的列清单的闭括号的后面。BOOKandAUTHOR是前面建立的聚簇的名字。

      Title是将存储到聚簇Col1中的该表的列。create cluster语句中可能会有多个簇键,并且在created table语句中可能有多个列存储在这些键中。请注意,没有任何语句明确说明Title列进入到Col1中。这种匹配仅仅是通过位置做到的,即Col1和 Title都是在它们各自的簇语句中提到的第一个对象。多个列和簇键是第一个与第一个匹配,第二个与第二个匹配,第三个与第三个匹配,等等。现在,添加第 二个表到聚簇中:
      create table BOOKSHELF_AUTHOR
      (Title VARCHAR2(100),
      AuthorName VARCHAR2(50),
      constraint TitleFK Foreign key (Title) references BOOKSHELF(Title),
      constraint AuthorNameFK Foreign key (AuthorName) references AUTHOR(AuthorName)
      )
      cluster BOOKandAUTHOR (Title);

      当这两个表被聚在一起时,每个唯一的Title在簇中实际只存储一次。对于每个Title,都从这两个表中附加列。

      来自这两个表的数据实际上存放在一个位置上,就好像簇是一个包含两个表中的所有数据的大表一样。

      3. 散列聚簇

      对于散列聚簇,它只有一个表。它通过散列算法求出存储行的物理存储位置,从而快速检索数据。创建散列聚簇时要指定码列的数据类型,数据行的大小及不同码值的个数。如果码值不是平均分布的,就可能有许多行存储到溢出块上,从而会降低查询该表的SQL语句的性能。

      散列聚簇被用在总是通过主键查询数据的情况,例如要从表 T 查询数据并且查询语句总是是这样:

      select * from T where id = :x;

      这时散列聚簇是一个好的选择,因为不需要索引。Oracle 将通过散列算法得到值 :x 所对应的物理地址,从而直接取到数据。不用进行索引扫描,只通过散列值进行一次表访问。

 

 

分享到:
评论

相关推荐

    数据库中聚簇索引与非聚簇索引的区别[图文]

    在《数据库原理》里面,对聚簇索引的解释是:聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的解释是:索引顺序与数据物理排列顺序无关。正式因为如此,所以一个表最多只能有一个聚簇索引。 不过这个定义太...

    高性能动态SQL Oracle数据安全 Oracle 数据库的聚簇技术 等等

    Oracle 数据库的聚簇技术 61 数据库、服务名、实例 63 Oracle内存结构 64 sys用户和system用户 67 Oracle SQL语句 67 GROUPING SETS分组 74 Oracle外部程序触发 75 Oracle数据库的备份与恢复 77 Oracle分区功能提高...

    Oracle Index 索引介绍

    NULL 博文链接:https://dolphin-ygj.iteye.com/blog/444147

    oracle 2 基本对象(索引,约束)2

    [2]oracle 2 基本对象(索引,约束) 表(Table)和 视图(View) 索引(Index)和 约束(Constraint) 函数(Function) 过程(Procedure) 其他(同义词,序列,簇,job,等)

    Oracle四大宝典之四:Oracle 调优入门到精通

    你所管理的Oracle系统性能是否“极好”,你的回答可能是“否”。你的系统在正常运行的情况下是否能降低资源的消耗?...第12章 聚簇 第13章 索引组织表 第14章 重要的ORACLE特性 第15章 分区 第16章 实体化视图

    Oracle表的分类以及相关参数的详解

    oracle中有如下几种类型的表:1、堆组织表(heap organized tables):常用的表类型,以堆的方式管理,当增加数据时,将使用段中第一个适合数据大小的空闲空间;当删除数据时,留下的空间允许以后的DML操作重用。2、...

    Oracle常用知识点小合集

    11g导出至10g、密码有效期问题、数据导出不完整、JOB不执行、创建大文件表空间、更改字符集、CPU使用情况、聚簇索引、通过dblink获取lob字段、无法识别本地sid、修复SPFILE文件、序列跳号问题、中文转拼音、自动备份...

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    10.5 索引聚簇表 368 10.6 散列聚簇表 376 10.7 有序散列聚簇表 386 10.8 嵌套表 390 10.8.1 嵌套表语法 390 10.8.2 嵌套表存储 399 10.8.3 嵌套表小结 402 10.9 临时表 402 10.10 对象表 410 10.11 小结 ...

    oracle 其他数据库对象

    5.1 数据库模式对象 5.2 索引 5.3 序列 5.4 同义词 5.5 聚簇 5.6 数据库链接 5.7 练习

    Oracle 9i数据库应用技术 电子教程

    12个PPT详细讲解Oracle ...第6章 Oracle 索引与聚簇 第7章 Oracle 视图 第8章 Oracle 的其它对象 第9章 Oracle 数据查询 第10章 Oracle 编程接口 第11章 Oracle 安全管理 第12章 Oracle 数据库备份和恢复

    《Oracle DBA手记——数据库诊断案例与性能优化实践》第一章 to be continued

    ├─第一篇 DBA工作手记 │ 01.Eygle的DBA工作手记 │ 02.Yangtingkun的DBA工作手记 │ 03.老熊的DBA手记 │ 04.BanPing的DBA工作...聚簇因子、柱状图与执行计划 04.表碎片及分页查询优化 05.一次排序的调整与优化

    达内总结的java最新笔试题core java,sql,web应有尽有

    使用索引聚簇表的注意点: a如果表中数据有大量DML操作的话,那么聚簇将不适用,因为会消极地影响到DML性能。 b聚簇中,全表扫描将受到影响。这是因为将扫描聚簇中不同表的数据,额外增加很多无用的数据。 c如果经常...

    数据库知识点总结

    文章目录1....8. 什么是聚簇索引与非聚簇索引9. Mysql索引主要使用的数据结构有哪些?10. 谈谈MyISAM和innoDb实现Btree索引方式的区别11. B+tree与B-tree的区别是什么?为什么B+tree更适合做文件索

    Oracle_Concepts_中文版.pdf

    oracle 入门很不错的一个手册,对于开发者帮助很...• 你要使用的模式对象(表、索引、聚簇等); • 内置数据类型和用户定义的数据类型; • SQL存储过程; • 事务如何工作; • 优化器; • 数据完整性; • 并发控制

    sql总结.doc

    (2)Mysql中搜索引擎Innodb(聚簇索引)和Mysiam(非聚簇索引)都采用B+,oracle也采用B+树实现 注:聚簇索引:一张表只能建立一个聚簇索引,以主键建立索引。聚簇索引包括主键索引和二级索引(二级索引是在对非主键...

    PRM-DUL Oracle(数据库恢复工具) v4.1.zip

    》》支持各种表,包括普通的HEAP表和聚簇(CLUSTER)表数据恢复 》》支持表被truncate后的数据恢复 》》支持表被drop后的数据恢复 》》支持在没有SYSTEM表空间和数据字典损坏的情况下的非字典模式数据恢复,并能...

    Oracle编程艺术

    第 1章 开发成功的Oracle应用程序...................................................... 61 1.1 我的方法................................................................................ 63 3 / 976 1.2 ...

    Oracle+9i&10g编程艺术:深入数据库体系结构

    讲述了有关Oracle特性和功能的一些原则和实现...• 你要使用的模式对象(表、索引、聚簇等); • 内置数据类型和用户定义的数据类型; • SQL存储过程; • 事务如何工作; • 优化器; • 数据完整性; • 并发控制。

    第5章 其他数据库对象.ppt

    5.1 数据库模式对象 5.2 索引 5.3 序列 5.4 同义词 5.5 聚簇 5.6 数据库链接

    深入讲解MySQL Innodb索引的原理

    所以,使用索引可以有效地提高数据库系统的整体性能。 嗯,这么说其实也对。但是呢,大家看完这种说法,其实可能还是觉得太抽象了!因此呢,我还想再深入的细说一下,所以就有了此文! 需要说明的是,我说的内容只...

Global site tag (gtag.js) - Google Analytics