在oracle中,数据库逻辑上的存储是按照“块,区,段,表空间”由小到大组成的。最小数据存储单位是块,区是由多个块组成的,段是由区组成的。系统可以通过在建库的时候设置对应区大小和块大小的参数。
索引在数据库中有多种存储方式,比较普遍的一种是B树,如下图,所有叶子节点在同一层,父节点的左叶子节点按照顺序要在父节点前面,右叶子节点在父节点的后面。
对于数据库表中的单条数据,一个块一般情况下会包含多条数据,查询语句进行查询的时候有可能一次通过IO读取一块,也有可能读取多块。每读取一次就要通过一次IO消耗性能。下面简单谈下自己在这三方面的理解。
1、索引和表数据单独存放
数据库中,不光实体数据表中的数据需要存入块中,索引也要存入块中,这样索引也需要存储空间。
2、读取索引和直接读取数据的差别
在查询数据时有两种读取数据的方式,一种是读取索引列中的值,在索引的存储空间中就能得到值,就没有必要再读取数据表中的数据了。如select id from table1 where id=1,在table1中的id列有索引。另外一种是先读取索引,找到对应数据表中的rowid,然后再根据rowid到表中数据的存储块中读取数据,如select name from table1 where id=1,table1中的name列没有索引。
3、有索引却不走的原因
按照SQL中的语句看,很多因素导致不走索引,但是通俗的理解,有两方面原因。第一,Oracle统计分析发现,走索引查询的性能消耗要大于不走索引的性能消耗,不走索引;第二,由于SQL中某些查询条件的原因,不走索引。
先解释第一种情况的发生原因。oracle在执行语句来查询数据的时候要有和数据磁盘的IO交互,一次IO交互可以读取一个数据块,也可以读取多个数据块。当通过执行索引获得rowid,再通过rowid来读取实体数据时只能一次IO精确读取一个数据块,这样在读取数据时非常准确,但是无形中也增加了IO的次数。当全表扫描时,会一次IO读取多个数据块,这样会减少IO次数,增大吞吐量。所以,这样看到,执行索引和全表扫描相比,不能确定那个更快,需要综合各种因素来判读,如数据量大大小,查询的数据量占总数据量的比重,块大小等等。
再来解释第二种情况。比如表person是千万级数据,有一列a上建有索引,这列中有0.1%的数据是null,这样在where a is null或者a is not null的时候都不会走索引。因为B树建立的索引上不存储null值(这里先不考虑其他结构的索引)。类似这种情况,总体来说,就是索引结构B树无法解决的条件,就不会走索引。
http://www.codingman.org/?p=5
分享到:
相关推荐
oracle 索引的原理原理深入理解!
Oracle数据库中的索引是优化查询性能的关键工具,它允许快速定位和访问数据。常见的索引类型包括B*树索引和位图索引,每种都有其特定的应用场景和优势。 1. **B*树索引**:这是最常见的索引类型,类似于二叉树结构...
本文将深入探讨Oracle索引的原理、创建方法,并结合SQL优化策略,帮助你提升数据库查询速度,降低资源消耗。 首先,我们要理解索引的基本概念。在数据库中,索引类似于书籍的目录,它为数据提供快速访问的途径。...
总的来说,Oracle索引机制的深入理解对于数据库性能调优、查询优化和系统设计都具有重要意义。正确使用索引可以显著提高查询速度,降低响应时间,提升用户体验,但同时也需要平衡索引对写操作的影响,以确保系统的...
总的来说,理解Oracle的各种索引类型及其工作原理对于优化数据库性能、提高查询效率至关重要。在实际应用中,数据库管理员需要根据业务需求和数据特性,合理设计和使用索引,以实现最佳的数据库性能。
### Oracle索引优化相关知识点详解 ...综上所述,正确地理解和运用Oracle索引的相关概念和技巧对于优化数据库性能至关重要。开发人员应该仔细考虑索引的设计和使用方式,避免由于不当使用而导致的性能问题。
综上所述,Oracle索引优化涉及到对不同索引类型的理解,以及在实际查询中的合理运用。通过避免上述限制因素,可以更有效地利用索引,提高查询性能。在设计和优化索引时,需要根据数据分布、查询模式以及业务需求综合...
### Oracle索引类型详解 #### 一、B\*Tree索引:数据检索的基石 在Oracle数据库中,B\*Tree索引是最常见的索引结构,也是默认创建的索引类型。它基于二叉树原理,由分支块(branch block)和叶块(leaf block)构成,...
本笔记主要探讨了两个关键概念:约束和索引,这些都是Oracle数据库中的基础但至关重要的元素。 **1. 约束(Constraints)** 约束是Oracle数据库中用于确保数据完整性的规则。它们分为以下几种类型: - **非空约束...
总结,Oracle的索引是提升数据库性能的关键工具,理解索引的工作原理,合理设计和管理索引,能有效优化数据库的查询性能,但同时也要注意其带来的额外存储和维护成本。在实际应用中,需要根据业务需求和查询模式,...
Oracle 索引是数据库管理系统中提升数据查询速度的关键技术。本文主要介绍Oracle数据库中不同类型的索引及其内部结构,以及各种索引的工作原理和适用场景...理解并熟练掌握这些索引策略,对于优化数据库性能至关重要。
总的来说,理解Oracle索引的工作原理并适当使用,是实现数据库高效运行的关键。正确选择和设计索引,避免使用限制索引的因素,能显著提高查询性能,减少数据库响应时间,从而提升整个系统的性能。在实践中,需要结合...
### Oracle索引的基本概念 #### 1. 创建索引 索引是数据库中一种用于提高数据检索速度的数据结构。通过创建索引,可以显著提升查询性能。例如,在`student`表上创建一个基于`sno`列的索引: ```sql CREATE INDEX ...
Oracle索引是数据库管理系统中用于加速数据检索的关键结构。它们的工作原理类似于书籍的目录,允许数据库系统快速定位和访问特定的数据行,而无需扫描整个表。Oracle提供了多种类型的索引,包括B树索引、位图索引、...
Oracle 数据库管理员需要深刻理解 Oracle 机制,采用更加灵活的方法,有效进行索引优化,提升查询效率。 在 Oracle 生产系统中,索引优化是一项重要的工作。 Oracle 数据库管理员需要根据实际情况,选择合适的索引...
Oracle索引是数据库管理系统中用于加速数据检索的关键数据结构,尤其在处理大量数据查询时,其效率至关重要。本文将深入探讨Oracle中的B树索引,包括它的概念、创建、删除和修改,以及如何理解其工作原理。 首先,...
在“湖南电信Oracle培训之索引创建.ppt”中,我们可推断出讨论的重点是如何在Oracle数据库中创建和理解索引的内部结构。 首先,索引分为几种主要类型,包括B树索引、位图索引、函数索引和全局唯一索引等。B树索引是...
### Oracle索引失效的原因及解决方法 ...总之,理解Oracle索引的工作原理及其失效的原因对于优化查询性能至关重要。通过遵循上述建议并不断监控索引的状态,可以显著提高数据库的性能和响应速度。