`
zscomehuyue
  • 浏览: 414773 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle数据库中利用索引表提高查询速度

阅读更多
Oracle数据库中利用索引表提高查询速度
在索引表的ROWID中存储的病不是记录的实际物理地址,而是逻辑的物理地址。故有些数据库管理员把索引表中的ROWID列称为ROWID伪主键列,他存放的是表的主键信息。

  一、索引表与标准表的差异。

  索引表与标准表的差异主要体现在四个方面。

  一是索引表中的ROWID列存放的时主键信息,使逻辑的物理地址。而在标准表的ROWID伪列中则存储的是真实的物理地址。这是两者之间最本质的区别。另外其他三个方面的差异都是因为有这个差异存在而存在。也可以说,他是索引表优势的根源。

  二是索引表对记录的访问是基于主键的,也就是说,根据逻辑的ROWID。而标准表在访问记录的时候,则是通过物理的ROWID地址。

  三是表的扫描方式不同。若采用索引表的话,则数据库是通过全索引扫描方式反问相关的记录;而若采用标准表的话,则是通过顺序扫描的方式返回相关的记录。这两者访问方式在性能上有很大的差异。全索引扫描方式,可能提供更高的查询性能。

  四是对于主键的要求不同。在建立标准表的时候,不一定要指定主键。但是,若用户在建立索引表的时候,则必须给表建立主键,使用主键来唯一表示一行记录。很简单,在索引表中,ROWID伪列中就存储着主键信息。若不指定具体的主键的话,数据访问时就不能够对记录进行定位。

  不过,索引表与标准表的差异只是停留在数据库开发的层面,或者说,只是内部存储结构上有一定的差异。但是,在用户使用它们的时候,没有任何的差异。在前台应用程序设计的时候,用户可以向普通表那样访问索引表。这就给索引表的应用排除了使用上的障碍。

  二、索引表的优势

  索引表的优势主要体现在数据查询上。而且,这个优势是非常明显的。

  一是索引表能够获得比标准表更快的查询速度,即使这张标准表已经建立了合适的索引。这跟索引表的存储结构是分不开的。因为索引表的数据在存储的时候,所有的行记录都是跟排序过的主键列一起存储在数据库系统中。故在查询的时候,只需要找到主键,就俄可以记录查询到整条记录的信息。而标准表在数据查询的时候,需要先找到对应的ROWID列,然后再去查询主键信息,再去查询对应的记录。所以,索引表减少了数据查询过程中的中间环节,避免了额外的数据块读取操作。
二是索引表中的记录,是按照主键列进行排序存储的。对于主键列范围内的查询,用户可以获得更快的查询速度。这主要是因为在表格的ROWID伪列中,直接存储了主键信息。

  三是利用溢出存储功能,提高常用列的访问速度。在后台数据库表中,可能有几十个字段。但是,前台用户在查询的时候,往往不需要访问所有的字段。那些用户经常要访问的列,就叫做常用列。对常用列与不常用列区别明显的,可以通过溢出存储功能,提高常用列的访问速度。即将表中不经常需要访问的非主键列不存储在 B树的叶子节点中,而是存储在一个具有堆组织方式的溢出存储区中。若索引表比较大,使用溢出存储不但可以减少索引表所占用的存储空间,而且可以提高常用列的查询效率。当然,这只是针对常用列而言。若用户查询非常用列时,溢出存储就没有效果了。

  三、索引表的使用时机

  1、 通过关键字查询表的内容。

  如果在实际应用中,大部分是通过主键列来查询其他列的信息的时候,就可以考虑把这张表建立为索引表。

  如在ERP系统中,有销售订单表、采购订单表等等。对于这些表单,用户查询的时候,大部分是按照订单单号来进行查询。此时,数据库管理员在设计的时候,就可以把这些单据的基础表格设置为索引表。

  特别是有些系统把单据分为单头档与单身档。如采购订单单头与采购订单单身。在前台显示为两个不同的页签,在后台对应两张不同的数据表。利用单头页签来调用单身的内容。此时,就是通过一个采购订单单头的ID列来查询单身的内容。在这种设计的时候,完全可以把订单单身对应的数据库表设置为“索引表”。从而提高数据查询的速度。

  2、 若表变化频繁,则不适宜使用索引表。

  若表的变更比较频繁的话,则采用索引表不怎么合适。这主要是因为Oracle数据库在对索引表管理时,开销比较大。如对于员工考勤系统中,员工信息这个表变更不是很频繁,但是,员工考勤信息表中的数据,则每个小时都可能会发生变化。
对于变换这么频繁的表格,建立索引表就不怎么合适。此时,我们需要为其建立基本表,然后在基本表上建立索引。这虽然查询效果没有索引表那么好,但是,却可以大大减少Oracle数据库的开销。所谓,有得必有失。数据库管理员有时候还必须在这个得失之间寻求一个平衡。以期数据库整体性能的最优化。

  3、 灵活利用溢出存储功能。

  普通B树索引条目一般比较小,因为在每个索引条目中仅保存索引列的值与ROWID的值。但是,因为索引表中的每个索引条目都包有整条地记录,所以,索引表中的索引条目就可能会很大。为此,用户若在索引表中查询数据,其查询的只是其中一部分字段内容的话,索引表的效果就体现不出来。相反,若表中的字段比较多的话,则效果会适得其反。为此,在Oracle数据库中,采用了溢出存储功能来应对索引表的这个缺陷。

  如在一张员工基本信息表中,他有员工姓名、员工编号、员工出身年月、身份证号码、住址、户口、民族等信息,长达几十个字段。但是,在平时的时候,我们基本上只需要查询员工的姓名、编号、身份证号码即可。而不需要其他的信息。

  此时,当员工比较多的时候,就需要把这张表转换成索引表,然后采用溢出管理功能,来提高员工信息常用字段的查询速度。把用户经常需要用到的员工姓名、编号、身份证号码等字段保存在叶子节点上。而把其他不常用的字段采取“溢出存储”策略。

  四、索引表的建立与使用

  在介绍索引表与基本表的差异时,笔者已经说过,两者的差异主要体现在存储结构上。故对于用户使用是没有多大影响的。

  在索引表的建立上,可以参考相关的书籍。笔者在这里只是要强调,在索引表建立过程中的几个关键点。

  一是在索引表中,不能对非主键建立索引,。这是索引表建立的一个限制条件,数据库管理人员必须无条件的遵守。二是必须给索引表建立主键。有些数据库管理员有个习惯,在建立表的时候,一开始不设置主键。等到表维护的时候,再确定某个字段作为主键。但是,在索引表建立的时候,一开始就要指定表的主键,否则的话,会有错误产生。这也是数据库管理人员需要注意的。
分享到:
评论

相关推荐

    Oracle数据库中大型表查询优化的研究

    综上所述,Oracle数据库中大型表查询优化涉及多个方面,包括索引优化、查询设计、工具利用、分区技术和数据库配置。每个环节都需要根据具体情况进行细致分析和调整,以实现最佳的查询性能。在实际操作中,应结合实际...

    提高ORACLE数据库的查询统计速度

    在部分内容中提到了创建新的表空间以及对现有表空间进行扩展的操作,这些步骤有助于改善Oracle数据库的查询统计性能: ```sql -- 创建表空间 CREATE TABLESPACE WXGL_DATA1 DATAFILE 'WXGL_DATA1.ORA' SIZE 500M ON...

    oracle、sql数据库批量建索引

    它减少了数据库执行查询时扫描整个表的次数,从而显著提高了查询速度。在数据量庞大的情况下,索引的重要性尤为突出。 对于Oracle数据库,批量创建索引可以通过SQL命令或者PL/SQL脚本来实现。例如,你可以使用`...

    Oracle数据库查询优化的方法

    在Oracle数据库中,索引的合理运用能够显著提升查询速度,减少I/O操作,避免磁盘排序。通常,索引的建立需要依据实际的查询模式。例如,如果一个复合索引的几个字段经常同时出现在WHERE子句中使用AND方式进行查询,...

    ORACLE数据库 ORACLE数据库

    Oracle数据库是全球最广泛使用的商业关系型数据库管理系统之一,由美国甲骨文公司(Oracle Corporation)开发和维护。...通过持续学习和实践,可以充分利用Oracle数据库的强大功能,满足企业对数据存储和管理的需求。

    ORACLE数据库设计与优化

    3. 表压缩:利用Oracle的压缩特性,降低存储成本,提高查询性能。 三、SQL优化 1. 查询语句优化:编写高效的SQL语句,避免全表扫描,使用索引,合理使用JOIN操作。 2. 子查询优化:通过连接(JOIN)操作替代子查询...

    Oracle数据库中大型表查询优化研究

    【Oracle数据库中大型表查询优化研究】 在Oracle数据库中,处理海量数据的查询是一个关键的挑战,因为这往往会导致系统响应时间过长,消耗大量系统资源。为了改善这种情况,本文针对Oracle数据库进行了深入的查询...

    充分利用索引作用提高Oracle数据库的性能.pdf

    优化Oracle数据库性能的关键在于合理设计和利用索引。数据库设计、应用程序调优、内存管理、I/O优化等多方面因素共同作用,而索引作为其中重要一环,通过正确创建和维护,可以显著提升查询效率,保障系统的高性能...

    Oracle数据库表结构导出工具Excel

    3. **数据库选择与表筛选**:说明如何在众多数据库和表中选择需要导出的特定对象。 4. **导出选项**:描述可以自定义的导出设置,如是否包含注释、触发器、存储过程等,并可以选择导出的字段格式。 5. **执行导出*...

    Oracle数据库--索引讲义.pptx

    在Oracle数据库中,索引是提高数据检索速度的关键工具。本讲义主要围绕索引的创建、类型以及管理展开,旨在帮助读者理解索引的重要性和使用方法。 1. **索引概述** - 索引是一种特殊的文件,用于快速访问数据库表...

    Oracle数据库试题100题(附答案)

    Oracle数据库是甲骨文公司推出的一个功能强大的关系数据库管理系统,它广泛应用于金融、电信、制造等行业。...通过这些试题,不仅能够加深对Oracle数据库理论知识的理解,还能够提高解决实际问题的能力。

    提高Oracle数据库查询效率

    在Oracle数据库管理与优化领域,提高查询效率是至关重要的一个环节。这不仅能够显著提升应用程序的性能,还能减少数据库服务器的负载,从而为用户提供更流畅的服务体验。本文将结合提供的SQL示例,深入探讨如何通过...

    基于Oracle数据库索引的查询优化研究.pdf

    例如,创建一个针对时间戳列的索引,然后对比带索引和不带索引的查询速度,结果表明,建立索引能显著提高查询速度。 4. 查询优化策略 选择正确的索引类型是优化的关键。对于频繁进行范围查询的列,B树索引通常更...

    Oracle数据库的查询优化

    2. **调整查询逻辑**:例如,假设表`T1`的`name`字段建立了索引,那么将查询条件`'name' LIKE 'A%'`改为`'name' = 'A'`可以显著提高查询效率。 3. **添加额外的筛选条件**:适当增加WHERE子句中的筛选条件可以帮助...

    oracle数据库学习宝典

    本"Oracle数据库学习宝典"旨在帮助你全面掌握Oracle数据库的核心概念和技术,包括视图、存储过程、索引、触发器、同义词以及分区表的使用。 首先,让我们深入了解**视图**。视图是数据库中的虚拟表,它并不实际存储...

    利用GDAL2.1.2库 把shp文件导入 oracle数据库中 例子

    5. **设置空间索引**:为了提高空间查询性能,导入完成后,需要在Oracle数据库中为新表创建空间索引,如使用MDSYS.SDO_INDEX_METHOD_10I方法。 6. **清理与优化**:关闭数据源,释放资源。如果需要,还可以执行...

    用智能优化限制提高Oracle数据库性能

    智能优化的核心在于利用数据库的内置机制,如成本基础优化(Cost-Based Optimizer, CBO)和智能搜索限制(Optimizer Search Limit),来自动调整和优化SQL执行计划,从而提高查询效率。 #### 2. 成本基础优化(CBO) ...

    oracle 资源整合大全,oracle对照,oracle数据库,oracle 讲解

    而SQL优化则是通过分析执行计划,选择最佳的访问路径和操作顺序来提高查询速度。 Oracle函数是SQL查询中不可或缺的部分。"oracle函数大全"可能包含了如数学函数、字符串函数、日期时间函数、转换函数等。例如,数学...

Global site tag (gtag.js) - Google Analytics