索引表与标准表的差异
一、索引表中的ROWID列存放的是【逻辑】物理地址。而标准表的ROWID伪列中存储的则是真实的物理地址,这是两者之间最本质的区别。另外其他几个方面的差异都是因为有这个差异存在而存在。或者说,它是索引表优势的根源。
二、索引表对记录的访问是基于主键的,也就是说,根据逻辑的ROWID。而标准表在访问记录的时候,则是通过物理的ROWID地址。
三、表的扫描方式不同。若采用索引表的话,则数据库是通过全索引扫描方式访问相关的记录;而若采用标准表的话,则是通过顺序扫描的方式访问相关的记录。这两者访问方式在性能上有很大的差异。全索引扫描方式,可能提供更高的查询性能。
四、对于主键的要求不同。在建立标准表的时候,不一定要指定主键。但是,若用户在建立索引表的时候,则必须给表建立主键,使用主键来唯一表示一行记录。很简单,在索引表中,ROWID伪列中就存储着主键信息。若不指定具体的主键的话,数据访问时就不能够对记录进行定位。
索引表与标准表的差异只是停留在数据库开发的层面,或者说,只是内部存储结构上有一定的差异。但是,在用户使用它们的时候,没有任何的差异。在前台应用程序设计的时候,用户可以向普通表那样访问索引表。这就给索引表的应用排除了使用上的障碍。
索引表的优势
索引表的优势主要体现在数据查询上。而且,这个优势是非常明显的。
一是索引表能够获得比标准表更快的查询速度,即使这张标准表已经建立了合适的索引。这跟索引表的存储结构是分不开的。因为索引表的数据在存储的时候,所有的行记录都是跟排序过的主键列一起存储在数据库系统中。故在查询的时候,只需要找到主键,就俄可以记录查询到整条记录的信息。而标准表在数据查询的时候,需要先找到对应的ROWID列,然后再去查询主键信息,再去查询对应的记录。所以,索引表减少了数据查询过程中的中间环节,避免了额外的数据块读取操作。
二是索引表中的记录,是按照主键列进行排序存储的。对于主键列范围内的查询,用户可以获得更快的查询速度。这主要是因为在表格的ROWID伪列中,直接存储了主键信息。
三是利用溢出存储功能,提高常用列的访问速度。在后台数据库表中,可能有几十个字段。但是,前台用户在查询的时候,往往不需要访问所有的字段。那些用户经常要访问的列,就叫做常用列。对常用列与不常用列区别明显的,可以通过溢出存储功能,提高常用列的访问速度。即将表中不经常需要访问的非主键列不存储在B树的叶子节点中,而是存储在一个具有堆组织方式的溢出存储区中。若索引表比较大,使用溢出存储不但可以减少索引表所占用的存储空间,而且可以提高常用列的查询效率。当然,这只是针对常用列而言。若用户查询非常用列时,溢出存储就没有效果了。
索引表的使用时机
1、 通过关键字查询表的内容。
如果在实际应用中,大部分是通过主键列来查询其他列的信息的时候,就可以考虑把这张表建立为索引表。
如在ERP系统中,有销售订单表、采购订单表等等。对于这些表单,用户查询的时候,大部分是按照订单单号来进行查询。此时,数据库管理员在设计的时候,就可以把这些单据的基础表格设置为索引表。
特别是有些系统把单据分为单头档与单身档。如采购订单单头与采购订单单身。在前台显示为两个不同的页签,在后台对应两张不同的数据表。利用单头页签来调用单身的内容。此时,就是通过一个采购订单单头的ID列来查询单身的内容。在这种设计的时候,完全可以把订单单身对应的数据库表设置为“索引表”。从而提高数据查询的速度。
2、 若表变化频繁,则不适宜使用索引表。
若表的变更比较频繁的话,则采用索引表不怎么合适。这主要是因为Oracle数据库在对索引表管理时,开销比较大。如对于员工考勤系统中,员工信息这个表变更不是很频繁,但是,员工考勤信息表中的数据,则每个小时都可能会发生变化。
对于变换这么频繁的表格,建立索引表就不怎么合适。此时,我们需要为其建立基本表,然后在基本表上建立索引。这虽然查询效果没有索引表那么好,但是,却可以大大减少Oracle数据库的开销。所谓,有得必有失。数据库管理员有时候还必须在这个得失之间寻求一个平衡。以期数据库整体性能的最优化。
3、 灵活利用溢出存储功能。
普通B树索引条目一般比较小,因为在每个索引条目中仅保存索引列的值与ROWID的值。但是,因为索引表中的每个索引条目都包有整条地记录,所以,索引表中的索引条目就可能会很大。为此,用户若在索引表中查询数据,其查询的只是其中一部分字段内容的话,索引表的效果就体现不出来。相反,若表中的字段比较多的话,则效果会适得其反。为此,在Oracle数据库中,采用了溢出存储功能来应对索引表的这个缺陷。
如在一张员工基本信息表中,他有员工姓名、员工编号、员工出身年月、身份证号码、住址、户口、民族等信息,长达几十个字段。但是,在平时的时候,我们基本上只需要查询员工的姓名、编号、身份证号码即可。而不需要其他的信息。
此时,当员工比较多的时候,就需要把这张表转换成索引表,然后采用溢出管理功能,来提高员工信息常用字段的查询速度。把用户经常需要用到的员工姓名、编号、身份证号码等字段保存在叶子节点上。而把其他不常用的字段采取“溢出存储”策略。
四、索引表的建立与使用
在介绍索引表与基本表的差异时,笔者已经说过,两者的差异主要体现在存储结构上。故对于用户使用是没有多大影响的。
在索引表的建立上,可以参考相关的书籍。笔者在这里只是要强调,在索引表建立过程中的几个关键点。
一是在索引表中,不能对非主键建立索引,。这是索引表建立的一个限制条件,数据库管理人员必须无条件的遵守。二是必须给索引表建立主键。有些数据库管理员有个习惯,在建立表的时候,一开始不设置主键。等到表维护的时候,再确定某个字段作为主键。但是,在索引表建立的时候,一开始就要指定表的主键,否则的话,会有错误产生。这也是数据库管理人员需要注意的。
<!-- 分页 --><!-- 分页 -->发表评论
文章已被作者锁定,不允许评论。
-
DB2 学习笔记
2012-03-19 12:28 0ORACLE CREATE TABLE COLUMN DEFA ... -
Oracle Session
2010-12-14 15:50 760select sid,user,status,machine, ... -
9i新特性之Flashback Query的应用-------------针对DML误操作的恢复【转】
2010-12-09 10:07 592用dbms_flashback包 dbms_flashb ... -
ORACLE【Undo Tablespace】
2010-12-08 15:28 984--查看unco tablespace使用情况的语句 SE ... -
oracle asm学习
2010-12-08 11:11 8981.什么是ASM ASM全称 ... -
Oracle学习之路【六】确定当前ORACLE的性能瓶颈
2010-12-03 13:57 801确定当前ORACLE的性能瓶颈 首先,利用V$SYSTEM_ ... -
Java排序【转】
2010-12-03 13:46 763=============================== ... -
Oracle学习之路【二】
2010-12-03 13:43 773=============================== ... -
Oracle学习之路【一】
2010-12-03 13:32 728============================= ... -
染指内存数据库【一】
2010-10-25 13:35 922IBM solidDB 可以部署为一个独立的内存数据库 ... -
ORACLE零散乱记
2010-06-15 15:15 962PGA_AGGREGATE_TARGET = (物理内存大小 ... -
ORACLE10g 自动SGA管理(一)
2010-01-23 19:33 920SGA -- 数据库块缓冲高速缓存 (db_cache_ ... -
ORACLE10g 闪回表学习
2010-01-23 19:20 636当表被Drop掉后,表及其相关对象被放在一个称 ... -
ORACLE10g ASSM 学习(二)
2010-01-20 21:14 726创建存储过程show_space create or ... -
ORACLE10g ASSM 学习(一)
2010-01-20 20:51 767创建存储过程show_space_assm CREAT ... -
ORACLE10g学习笔记(六)
2010-01-17 23:06 7651. 自动碎片整理 Coalesce ... -
ORACLE10g学习笔记(五)
2010-01-17 19:48 5761. 检查Oracle的进程 $ ... -
ORACLE10g学习笔记(四)
2010-01-17 19:41 7281. 实时查询最耗CPU资源的SQL语句 1. 先通过top ... -
ORACLE10g学习笔记(三)
2010-01-17 17:40 7461. 数据库字符集 通过AL ... -
ORACLE10g学习笔记(二)
2010-01-17 16:29 7321. 表内操作 表内操作 -- 1 -- 删除原主键 ...
相关推荐
#### 一、Oracle索引概览 索引在Oracle数据库中扮演着极其重要的角色,它是提高数据检索速度的关键技术之一。简单来说,索引类似于书籍中的目录,可以帮助快速定位数据的位置,从而显著提升查询效率。 #### 二、...
本篇文章将深入探讨Oracle索引的学习,重点关注索引的原理、类型、优缺点以及如何使用和分析执行计划。 首先,理解索引的基本概念。索引是一种特殊的数据结构,它存储在表空间中,用于加速对表数据的访问。当执行...
本文将深入探讨Oracle索引的原理、创建方法,并结合SQL优化策略,帮助你提升数据库查询速度,降低资源消耗。 首先,我们要理解索引的基本概念。在数据库中,索引类似于书籍的目录,它为数据提供快速访问的途径。...
本文将深入探讨Oracle索引的学习初步,帮助读者理解其原理、类型、创建与管理,以及如何优化查询。 一、索引原理 索引就像是书籍的目录,允许我们快速定位到所需信息,而非逐页翻阅。在Oracle数据库中,索引通过...
5. **表和索引**:表是Oracle中的基本数据结构,索引则用于提高查询速度。理解如何创建、修改和删除表,以及何时创建和使用索引,是提升数据库性能的关键。 6. **PL/SQL**:Oracle的编程语言PL/SQL是SQL的扩展,它...
### Oracle索引的基本概念 #### 1. 创建索引 索引是数据库中一种用于提高数据检索速度的数据结构。通过创建索引,可以显著提升查询性能。例如,在`student`表上创建一个基于`sno`列的索引: ```sql CREATE INDEX ...
在Oracle数据库的学习过程中,"学习oracle必备例表"是一份非常关键的资源,它包含了用于实践和理解Oracle SQL语句的示例数据。这个压缩包文件主要包括三个脚本:hr_cre.sql、hr_popul.sql和del_data.sql。下面将详细...
以下是对Oracle分区表和分区索引的深入解析: 1. **何时使用分区**: - 当表的数据量超过2GB时,分区有助于避免32位操作系统下的文件大小限制,同时减少大规模数据的备份时间。 - 对于包含历史数据的表,如按月份...
对于初学者来说,从零开始学习Oracle需要掌握一系列的基础知识,这些知识涵盖了数据库的基本概念、Oracle的架构、SQL语言以及数据库管理等方面。 首先,理解数据库的基本概念至关重要。数据库是一个组织和存储数据...
《Oracle 10G学习完全图解》是针对Oracle数据库初学者和进阶者的一份珍贵资源,它包含了从安装到使用的全方位指导。Oracle 10G是Oracle公司推出的一款重要版本,它在数据库管理、性能优化、安全性等方面都有显著提升...
5. 性能监控与调优:使用Oracle的性能分析工具(如SQL*Plus、 tkprof 和AWR报告)进行性能监控,并学习如何通过调整SQL语句、索引或系统参数来优化性能。 6. 集群与高可用性:理解Oracle Real Application Clusters...
Oracle11g支持多种类型的索引,包括B树索引、位图索引和函数索引。理解何时使用哪种类型的索引,以及如何创建和优化索引,对于数据库性能至关重要。 数据库安全性是另一个关键话题。Oracle11g提供了用户管理和权限...
在Oracle中,SQL用于创建、修改和查询数据库对象,如表、视图、索引等。基础的SQL语句包括: 1. **SELECT**:用于从数据库中检索数据,是最常用的SQL语句。可以指定字段、筛选条件、排序方式、分组规则等。 2. **...
4. **索引**:索引是提高查询速度的关键,学习如何创建、管理和优化索引,理解B树索引、位图索引、函数索引等不同类型及其应用场景。 5. **备份与恢复**:Oracle提供了多种备份策略,如RMAN(Recovery Manager)、...
总的来说,Oracle分区表培训内容涵盖了分区表的原理、创建、索引构建、元数据管理以及实际操作,这些都是提升数据库性能和管理效率的关键技能。通过深入学习和实践这些示例,员工将能够更好地应对大数据环境下的挑战...
标题中的"ch06 oracle索引"表明我们将探讨Oracle数据库中的索引机制,这在数据库管理、查询优化以及性能提升方面具有重要意义。Oracle索引是一种数据结构,它能加速对表中数据的查找,提高查询速度,降低I/O操作,...
Oracle索引分为逻辑上和物理上独立的对象,创建或删除索引不会影响表本身、其他索引或数据库应用程序。在DML操作(插入、更新、删除)时,Oracle会自动维护索引,确保索引与数据同步。 索引的工作原理是通过一组...
Oracle 10g 学习课件是一套全面的教程,专为想要深入理解Oracle数据库管理系统的人们设计。Oracle数据库是全球广泛使用的大型企业级数据库系统,尤其在金融、电信和政府等行业中占据主导地位。Oracle 10g是其第十个...
10. **性能优化**:学习SQL优化,如使用EXPLAIN PLAN分析查询执行计划,以及通过调整表分区、索引和统计信息来提高查询性能。 11. **数据库设计**:掌握数据库设计原则,如范式理论(第一范式到第五范式),以及...