`
sunny.yang
  • 浏览: 31662 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

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 所对应的物理地址,从而直接取到数据。不用进行索引扫描,只通过散列值进行一次表访问。 

--摘自网络,感谢作者

分享到:
评论

相关推荐

    行业-69 更新数据的时候,自动维护的聚簇索引到底是什么?l.rar

    聚簇索引是数据库表中的一个关键概念,尤其是在关系型数据库系统中,如MySQL、SQL Server、Oracle等。本篇文章将深入探讨更新数据时自动维护的聚簇索引的本质及其作用。 首先,我们来理解什么是聚簇索引。聚簇索引...

    Oracle中聚簇表的使用

    2. **创建聚簇索引**:创建一个索引以支持聚簇的检索操作。 ```sql CREATE INDEX e_d_cluster_idx ON CLUSTER e_d_cluster; ``` 3. **创建表**:接下来创建表时指定使用哪个聚簇。 ```sql CREATE TABLE ...

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

    数据库中的索引是提高数据检索效率的关键工具,分为聚簇索引和非聚簇索引两种类型。聚簇索引决定了数据在磁盘上的物理存储顺序,因此索引的叶子节点就是实际的数据行。而非聚簇索引则独立于数据的物理顺序,其叶子...

    oracle,数据库索引

    根据物理存储方式,索引分为【聚簇索引】和【非聚簇索引】。聚簇索引是按照数据的实际存储顺序排列的,而非聚簇索引则不遵循此规则。聚簇索引对于多行检索有优势,而非聚簇索引在单行查询时表现出色。 创建索引的...

    Oracle Index 索引介绍

    **Oracle索引详解** Oracle索引是数据库管理系统中用于提高查询效率的重要数据结构。它的工作原理类似于书籍的目录,允许数据库系统快速定位到所需的数据行,而无需扫描整个表。索引的存在使得对大量数据的查找、...

    oracle索引,常见索引问题

    - **B*树聚簇索引**:一个键值对应一个数据块,包含该键值相关的一组行。 - **降序索引**:数据按照降序排列,有助于优化ORDER BY子句的反向排序查询。 - **反向键索引**:用于解决连续值导致的索引块竞争问题,...

    ORACLE索引的使用与优化.pdf

    索引结构优化可以通过调整索引的结构来提高查询性能,例如,使用聚簇索引可以提高查询性能,但需要注意的是,聚簇索引也需要占用更多的存储空间。 索引使用优化可以通过合理地使用索引来提高查询性能,例如,使用...

    oracle资料,很好的资料

    - 查询特定学生信息:通过比较表扫描、非聚簇索引和聚簇索引,发现使用索引能显著减少查询时间,而聚簇索引在本例中的优势不明显。 2. 多点查询(结果集包含多个元组) - 查询特定课程的所有成绩:聚簇索引在查询...

    影响Oracle数据库索引的几个因素浅析.pdf

    聚簇索引是将数据表中的记录按照索引键排序后的结果,而非聚簇索引是将索引键和实际数据存储在不同的表中。 二、索引的作用 索引的主要作用是提高查询表中的记录速度。它可以减少查询所需的时间和资源。索引可以...

    Oracle 索引 详解

    * 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 * 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低...

    Oracle B*树索引内部机制及其应用的研究.pdf

    2. 聚簇索引(Clustered Index):聚簇索引决定了数据在物理存储上的顺序,一个聚簇索引的键值会指向包含多行数据的数据库块。对于经常需要按索引顺序访问数据的场景,聚簇索引非常有效。 3. 反向索引(Reverse ...

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

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

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

    Oracle数据库是世界上最广泛使用的数据库管理系统之一,以其高效、稳定和强大的功能著称。本文将深入探讨Oracle的一些核心知识点,包括数据导入导出、系统性能优化、动态SQL、数据安全以及数据库的架构和管理。 1. ...

    oracle索引

    2. Clustered索引:在物理存储上,数据按照索引顺序排列,Oracle中默认表是非聚簇索引,但在某些情况下,如频繁联合查询的表,可以考虑创建聚簇索引。 3. Composite索引:由多个列组成的索引,适合多条件查询。 4....

    Oracle 与SqlServer

    对于索引,SQL Server支持每表1个聚簇索引和最多249个非聚簇索引,而Oracle允许每个表有1个聚簇索引(对于索引组织表)以及无限数量的非聚簇索引。聚簇索引在决定数据物理顺序方面起关键作用,非聚簇索引则独立于...

    关于ORACLE数据库中索引的几点讨论.pdf

    - **CF(聚簇因子)**:它反映了每个索引块对应的平均数据块数。如果索引项在数据块中的分布很均匀,CF值较低,反之则较高。较高的CF意味着使用索引可能需要读取更多的数据块。 - **FF(过滤因子)**:这是选择...

    oracle索引说明.pdf

    如果聚簇因子差,意味着索引中的键值顺序与数据行的物理顺序不匹配,这可能会影响索引的效率。在某些情况下,可能需要重建索引来改善聚簇因子,以提高查询性能。 5. 更新操作与性能: 由于数据库的更新操作通常...

    WEBHR9.0索引建立帮助文档.pdf

    3. 非聚簇索引:与聚簇索引相反,适用于字符型主键,WEBHR9.0系统中大部分表推荐使用非聚簇索引。 三、数据库优化与维护 1. 在Oracle数据库中,系统具有自动优化功能,会根据字段使用频率创建或删除索引。这可能...

Global site tag (gtag.js) - Google Analytics