Oracle索引介绍
Oracle索引(Index)介绍使用
![Oracle索引(Index)介绍使用](https://img.taocdn.com/s3/m/13e3e9593d1ec5da50e2524de518964bcf84d2a8.png)
Oracle索引(Index)介绍使⽤1.什么是引 索引是建⽴在表的⼀列或多个列上的辅助对象,⽬的是加快访问表中的数据;Oracle存储索引的数据结构是B*树,位图索引也是如此,只不过是叶⼦节点不同B*数索引;索引由根节点、分⽀节点和叶⼦节点组成,上级索引块包含下级索引块的索引数据,叶节点包含索引数据和确定⾏实际位置的rowid。
2.使⽤索引的⽬的 当查询返回的记录数排序表<40%⾮排序表 <7%且表的碎⽚较多(频繁增加、删除)时可以加快查询速度减少I/O操作消除磁盘排序3.索引的分类及结构 从物理上说,索引通常可以分为:分区和⾮分区索引、常规B树索引、位图(bitmap)索引、翻转(reverse)索引等。
其中,B树索引属于最常见的索引,由于我们的这篇⽂章主要就是对B树索引所做的探讨,因此下⾯只要说到索引,都是指B树索引。
B树索引是⼀个典型的树结构,其包含的组件主要是:1) 叶⼦节点(Leaf node):包含条⽬直接指向表⾥的数据⾏。
2) 分⽀节点(Branch node):包含的条⽬指向索引⾥其他的分⽀节点或者是叶⼦节点。
3) 根节点(Root node):⼀个B树索引只有⼀个根节点,它实际就是位于树的最顶端的分⽀节点。
可以⽤下图⼀来描述B树索引的结构。
其中,B表⽰分⽀节点,⽽L表⽰叶⼦节点。
对于分⽀节点块(包括根节点块)来说,其所包含的索引条⽬都是按照顺序排列的(缺省是升序排列,也可以在创建索引时指定为降序排列)。
每个索引条⽬(也可以叫做每条记录)都具有两个字段。
第⼀个字段表⽰当前该分⽀节点块下⾯所链接的索引块中所包含的最⼩键值;第⼆个字段为四个字节,表⽰所链接的索引块的地址,该地址指向下⾯⼀个索引块。
在⼀个分⽀节点块中所能容纳的记录⾏数由数据块⼤⼩以及索引键值的长度决定。
⽐如从上图⼀可以看到,对于根节点块来说,包含三条记录,分别为(0 B1)、(500 B2)、(1000B3),它们指向三个分⽀节点块。
dba_indexes index_type字段解释
![dba_indexes index_type字段解释](https://img.taocdn.com/s3/m/0d29fa25dcccda38376baf1ffc4ffe473368fd01.png)
dba_indexes index_type字段解释
DBA_INDEXES 是Oracle 数据库中一个重要的数据字典视图,用于列出数据库中所有的索引。
这个视图中的INDEX_TYPE 字段表示索引的类型。
INDEX_TYPE 字段可能的值包括:
NORMAL:常规的B-tree 索引。
这是最常见的索引类型。
BITMAP:位图索引。
这种索引适用于低基数列,即列中的唯一值数量相对较少。
FUNCTION-BASED:基于函数的索引。
这种索引基于函数或表达式的结果,而不是基于列的值。
DOMAIN:域索引。
这种索引与特定的表或视图相关联,并用于优化特定的查询操作。
LOCAL:本地分区索引。
这是与分区表相关的本地索引。
GLOBAL:全局分区索引。
这是与分区表相关的全局索引。
CONSUMER-INDEX:消费者索引。
这是用于消费者表空间的数据字典视图,而不是用于直接查询的常规索引。
CLUSTER:簇索引。
这种索引与簇表相关联,用于优化对簇的访问。
SPATIAL:空间索引。
这种索引用于支持空间数据的查询操作。
OLAP SLICER:OLAP 切片机索引。
这种索引与OLAP 多维数据集相关联,用于优化多维数据的查询操作。
oracle索引的结构
![oracle索引的结构](https://img.taocdn.com/s3/m/29e5f6c7cd22bcd126fff705cc17552707225e06.png)
oracle索引的结构Oracle索引的结构:了解索引对数据库性能的重要性引言:在数据库中,索引是一种数据结构,它可以加快数据的检索速度,提高数据库的性能。
Oracle作为一种关系型数据库管理系统,也使用索引来优化查询操作。
本文将详细介绍Oracle索引的结构以及其对数据库性能的影响。
一、什么是索引索引是一种数据结构,它类似于书籍的目录,可以帮助我们快速找到需要的数据。
在Oracle中,索引由一个或多个列组成,可以根据这些列的值快速定位到对应的行。
二、Oracle索引的结构1. B树索引B树索引是Oracle中最常见的索引类型。
它使用B树数据结构来组织索引数据,具有平衡性和高效性。
B树索引将索引数据存储在叶子节点中,并使用非叶子节点来加速查找过程。
B树索引适用于范围查询和精确查询。
2. B+树索引B+树索引是B树索引的一种变体,也是Oracle中常用的索引类型。
与B树索引不同,B+树索引将所有索引数据存储在叶子节点中,并使用非叶子节点来组织叶子节点之间的关系。
B+树索引适用于范围查询和排序操作。
3. 唯一索引唯一索引是一种特殊的索引类型,它要求索引列的值唯一,即不允许重复值。
唯一索引可以提高数据的完整性,并且可以通过快速查找来避免重复插入。
在Oracle中,唯一索引可以是B树索引或B+树索引。
4. 聚簇索引聚簇索引是一种特殊的索引类型,它将数据存储在物理上相邻的区域。
在Oracle中,表只能有一个聚簇索引,它可以加速范围查询和连接操作。
聚簇索引通常与主键约束一起使用。
三、索引对数据库性能的影响1. 提高查询速度索引可以加快查询操作的速度,尤其是在大型数据库中。
通过使用索引,数据库可以更快地定位到需要的数据,而不必扫描整个表。
2. 降低IO成本索引可以减少磁盘IO操作,提高数据库的IO性能。
当查询条件与索引列匹配时,数据库可以直接读取索引节点,而不必读取整个数据块。
3. 影响更新性能虽然索引可以提高查询性能,但对于更新操作,索引可能会带来额外的开销。
oracle主键索引和普通索引
![oracle主键索引和普通索引](https://img.taocdn.com/s3/m/94617e6f443610661ed9ad51f01dc281e53a56d5.png)
oracle主键索引和普通索引在关系型数据库中,索引是提高查询效率的重要手段之一。
在Oracle数据库中,主键索引和普通索引是常见的两种索引类型。
本文将介绍它们的定义、特点以及适用场景,以帮助读者理解和正确使用这两种索引。
一、主键索引主键索引是一种用于唯一标识表中记录的索引类型。
在创建表时,可以通过定义主键来自动创建主键索引。
主键索引中的键值必须是唯一的,并且不能为空值。
1. 定义主键索引在创建表时,可以通过在列定义后使用PRIMARY KEY关键字来定义主键。
例如,创建一个名为"customer"的表,并为"customer_id"列定义主键索引,可以使用以下语句:CREATE TABLE customer (customer_id NUMBER PRIMARY KEY,first_name VARCHAR2(50),last_name VARCHAR2(50));2. 特点与优势- 主键索引的键值唯一且不能为空值,确保了表中记录的完整性。
- 主键索引物理上以B树的形式存储,查询速度较快。
- 主键索引可以被外键引用,用于维护表与表之间的引用完整性。
- 主键索引可以用于加速表的连接操作,提升查询性能。
3. 适用场景主键索引适合用于标识唯一记录的列,例如身份证号、学号等。
在高并发的系统中,主键索引的使用可以避免数据冲突和错误插入。
二、普通索引普通索引(也称为辅助索引)是一种非唯一索引类型,可以用于提高查询效率。
与主键索引不同,普通索引的键值可以重复且可以为空值。
1. 定义普通索引在创建表时,可以通过使用CREATE INDEX语句来定义普通索引。
例如,为"product_name"列创建一个普通索引,可以使用以下语句:CREATE INDEX idx_product_name ON products(product_name);2. 特点与优势- 普通索引可以加速查询速度,减少数据扫描的次数。
oracle 联合索引原理
![oracle 联合索引原理](https://img.taocdn.com/s3/m/53db8b2c6fdb6f1aff00bed5b9f3f90f77c64d76.png)
oracle 联合索引原理Oracle是一种关系型数据库管理系统,它的联合索引是一种特殊的索引类型,可以提高查询效率和性能。
本文将介绍Oracle联合索引的原理及其优势。
一、联合索引的定义联合索引是由多个列组成的索引,这些列可以是一个表中的任意列。
与普通索引不同的是,联合索引可以通过多个列的组合进行查询,从而提高查询效率。
当查询条件中涉及到联合索引的列时,数据库可以直接利用联合索引进行快速定位,减少了查询的时间和资源消耗。
二、联合索引的原理1. 索引结构Oracle使用B树索引结构来实现联合索引。
B树是一种平衡二叉树,它可以保持索引的有序性,并且在插入、删除和查询操作中都能够保持较高的效率。
对于联合索引来说,B树的每个节点都包含了多个列的值,这样可以根据查询条件中的多个列进行快速定位。
2. 索引的创建在Oracle中,可以通过CREATE INDEX语句来创建联合索引。
语法如下:CREATE INDEX index_name ON table_name (column1,column2, ...);3. 索引的使用当查询条件中涉及到联合索引的列时,Oracle会自动选择使用联合索引进行查询。
数据库会根据联合索引的列顺序以及查询条件中的列顺序进行匹配,以找到满足条件的记录。
如果查询条件中的列顺序与联合索引的列顺序不一致,数据库可能无法使用联合索引,从而导致查询效率下降。
三、联合索引的优势1. 提高查询效率联合索引可以根据多个列的组合进行查询,从而提高查询效率。
当查询条件中涉及到联合索引的列时,数据库可以直接利用联合索引进行快速定位,减少了查询的时间和资源消耗。
2. 减少存储空间相比于多个单列索引,联合索引可以减少存储空间的占用。
联合索引将多个列的值存储在同一个索引结构中,避免了重复存储的问题。
3. 提高数据维护效率使用联合索引可以减少索引的数量,简化了数据库的维护工作。
当表的数据发生变化时,只需维护少量的联合索引,而不需要维护多个单列索引。
oracle 索引语句
![oracle 索引语句](https://img.taocdn.com/s3/m/7898e2e5b8f3f90f76c66137ee06eff9aef84999.png)
oracle 索引语句Oracle 索引语句是一组用来创建、修改、删除索引的 SQL 语句。
索引是数据库中的一个关键组成部分,它可以提高查询的速度,并帮助加速数据的检索。
在本文中,我们将介绍 Oracle 索引语句的相关操作,并深入了解如何使用这些语句来优化数据库性能。
### 1. 创建索引创建索引是一种常见的数据库优化技术。
一个索引是基于一个或多个列的排序数据结构,用于快速查找匹配行。
要创建索引,请使用CREATE INDEX 语句,后跟索引名称、表名和列名。
例如,以下 SQL 语句创建一个名为“idx_customers” 的索引,该索引基于“customers” 表中的“last_name” 列:```CREATE INDEX idx_customers ON customers (last_name);```### 2. 修改索引有时候,您可能需要更改现有的索引,以便优化性能或更新表结构。
要更改索引,请使用 ALTER INDEX 语句,后跟索引名称、修改选项和新值。
例如,以下 SQL 语句使用 ALTER INDEX 修改名为“idx_customers”的索引,以添加一个新列“first_name”:```ALTER INDEX idx_customers ADD (first_name);```### 3. 删除索引如果您不再需要一个索引,可以使用 DROP INDEX 语句将其删除。
但是,要小心不要删除真正需要的索引,因为这会导致查询变慢。
例如,以下 SQL 语句删除名为“idx_customers”的索引:```DROP INDEX idx_customers;```### 4. 索引分类在 Oracle 中,有多种类型的索引,每种索引都有其优点和适用范围。
以下是一些常见类型的索引:- B 树索引:这是最常用的索引类型,用于快速查找匹配值,并支持多列查询。
- 哈希索引:这种索引使用哈希表数据结构,可以快速查找匹配值。
oracle索引原理详解
![oracle索引原理详解](https://img.taocdn.com/s3/m/3e2fa031a517866fb84ae45c3b3567ec102ddc16.png)
oracle索引原理详解Oracle数据库中的索引是用于提高数据检索速度的重要工具。
了解Oracle索引的原理对于数据库管理员和开发人员来说是非常重要的。
一、索引的基本概念索引是Oracle数据库中的一个对象,它可以帮助数据库系统更快地检索数据。
索引类似于书籍的目录,可以快速定位到所需的数据。
二、索引的分类1. B-Tree索引:这是Oracle中最常用的索引类型,基于平衡多路搜索树(B-Tree)实现。
B-Tree索引适用于大多数数据类型,包括字符、数字和日期等。
2. Bitmap索引:位图索引主要用于处理包含大量重复值的列。
通过位图索引,可以更高效地处理这些列的查询。
3. 函数基索引:函数基索引允许在列上应用函数,然后对该结果进行索引。
这可以用于优化包含函数操作的查询。
4. 反转键索引:反转键索引是一种特殊类型的B-Tree索引,用于优化插入操作。
通过反转键顺序,可以更高效地处理插入操作。
三、索引的创建和维护1. 创建索引:创建索引的基本语法是“CREATE INDEX index_name ON table_name (column_name)”。
其中,index_name是索引的名称,table_name是要创建索引的表名,column_name是要索引的列名。
2. 维护索引:定期维护索引可以确保其性能和可靠性。
常用的维护操作包括重建索引(REBUILD INDEX)和重新组织索引(ORGANIZE INDEX)。
四、索引的优点和缺点1. 优点:使用索引可以显著提高数据检索速度,减少查询时间。
此外,索引还可以用于优化复杂查询的性能。
2. 缺点:虽然索引可以提高性能,但它们也会占用额外的磁盘空间。
此外,当表中的数据发生变化时,索引也需要更新,这可能会影响写操作的性能。
五、最佳实践1. 在经常用于搜索和排序的列上创建索引。
2. 根据查询模式和数据分布选择合适的索引类型。
3. 定期分析和维护索引,确保其性能和可靠性。
Oracle索引详解
![Oracle索引详解](https://img.taocdn.com/s3/m/68ae26f40875f46527d3240c844769eae009a305.png)
一.索引介绍1.1 索引的创建语法:CREATE UNIUQE | BITMAP INDEX <schema>.<index_name>ON <schema>.<table_name>(<column_name> | <expression> ASC | DESC,<column_name> | <expression> ASC | DESC,...)TABLESPACE <tablespace_name>STORAGE <storage_settings>LOGGING | NOLOGGINGCOMPUTE STATISTICSNOCOMPRESS | COMPRESS<nn>NOSORT | REVERSEPARTITION | GLOBAL PARTITION<partition_setting>相关说明1) UNIQUE | BITMAP:指定UNIQUE为唯一值索引,BITMAP为位图索引,省略为B-Tree索引。
2)<column_name> | <expression> ASC | DESC:可以对多列进行联合索引,当为expression 时即“基于函数的索引”3)TABLESPACE:指定存放索引的表空间(索引和原表不在一个表空间时效率更高)4)STORAGE:可进一步设置表空间的存储参数5)LOGGING | NOLOGGING:是否对索引产生重做日志(对大表尽量使用NOLOGGING来减少占用空间并提高效率)6)COMPUTE STATISTICS:创建新索引时收集统计信息7)NOCOMPRESS | COMPRESS<nn>:是否使用“键压缩”(使用键压缩可以删除一个键列中出现的重复值)8)NOSORT | REVERSE:NOSORT表示与表中相同的顺序创建索引,REVERSE表示相反顺序存储索引值9)PARTITION | NOPARTITION:可以在分区表和未分区表上对创建的索引进行分区1.2 索引特点:第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
oracle的索引类型
![oracle的索引类型](https://img.taocdn.com/s3/m/fb23cf4a03768e9951e79b89680203d8ce2f6a36.png)
oracle的索引类型
Oracle数据库中常见的索引类型包括:1. B树索引(B-tree Index):是Oracle 默认的索引类型,适用于等值查找和范围查找。
2. 唯一索引(Unique Index):确保索引列的值在表中是唯一的。
3. 聚集索引(Cluster Index):按照表的物理存储顺序进行索引,适用于频繁进行范围查找的列。
4. 位图索引(Bitmap Index):将索引列的不同值分组为位图,并对每个位图使用压缩算法,适用于低基数列(取值范围较小)。
5. 函数索引(Function-Based Index):基于表达式或函数的结果构建的索引,适用于计算、转换或覆盖列的查询。
6. 虚拟列索引(Virtual Column Index):基于虚拟列(由表达式计算而来)构建的索引。
7. 全文索引(Full-Text Index):适用于对文本数据进行全文搜索的场景。
8. 空间索引(Spatial Index):适用于对地理位置和空间数据进行查询和分析。
9. 哈希索引(Hash Index):根据哈希函数计算的值来构建索引,适用于等值查询的索引。
10. 反向索引(Reverse Key Index):逆序存储索引键的位模式,适合于高度并发且插入操作有序的情况。
需要根据具体业务和查询需求选择合适的索引类型,以提高查询性能。
Oracle中本地索引和全局索引
![Oracle中本地索引和全局索引](https://img.taocdn.com/s3/m/574654130640be1e650e52ea551810a6f524c809.png)
Oracle中本地索引和全局索引Oracle中的本地索引和全局索引在测试MPP和Click House的性能问题时候,发现业务上MPP查询速度有很⼤差别,后⾯发现是建⽴了本地索引来加速,对于现场场景,基本按⽇分区,其中如果不建⽴索引,10E量级数据和建⽴索引的差别将达到数⼗倍差别MPP的本地索引和Oracle中的索引概念差不多,但是没有全局索引(华为MPP没有,应该有性能⽅向考虑)分区索引分为本地(local index)索引和全局索引(global index)。
其中本地索引⼜可以分为有前缀(prefix)的索引和⽆前缀(nonprefix)的索引。
⽽全局索引⽬前只⽀持有前缀的索引。
B树索引和位图索引都可以分区,但是HASH索引不可以被分区。
位图索引必须是本地索引。
下⾯就介绍本地索引以及全局索引各⾃的特点来说明区别;本地索引特点1. 本地索引⼀定是分区索引,分区键等同于表的分区键,分区数等同于表的分区说,⼀句话,本地索引的分区机制和表的分区机制⼀样。
2. 如果本地索引的索引列以分区键开头,则称为前缀局部索引。
3. 如果本地索引的列不是以分区键开头,或者不包含分区键列,则称为⾮前缀索引。
4. 前缀和⾮前缀索引都可以⽀持索引分区消除,前提是查询的条件中包含索引分区键。
5. 本地索引只⽀持分区内的唯⼀性,⽆法⽀持表上的唯⼀性,因此如果要⽤本地索引去给表做唯⼀性约束,则约束中必须要包括分区键列。
6. 本地分区索引是对单个分区的,每个分区索引只指向⼀个表分区,全局索引则不然,⼀个分区索引能指向n个表分区,同时,⼀个表分区,也可能指向n个索引分区,对分区表中的某个分区做truncate或者move,shrink等,可能会影响到n个全局索引分区,正因为这点,本地分区索引具有更⾼的可⽤性。
7. 位图索引只能为本地分区索引。
8. 本地索引多应⽤于数据仓库环境中。
本地索引:创建了⼀个分区表后,如果需要在表上⾯创建索引,并且索引的分区机制和表的分区机制⼀样,那么这样的索引就叫做本地分区索引。
ORACLE索引的类型
![ORACLE索引的类型](https://img.taocdn.com/s3/m/7c47d7d4b9f3f90f76c61b4d.png)
4、 应用域索引( application domain index )
应用域索引是你自己构建和存储的索引,可能存储在Oracle 中,也可能在 Oracle 之外。你要告诉优化器索引的选择性如何,以及执行的开销有多大,优化器则会根据你提供的信息来决定是否使用你的索引。 Oracle 文本索引就是应用域索引的一个例子;你也可 以使用构建 Oracle 文本索引所用的工具来建立自己的索引。需要指出,这里创建的 “ 索引 “ 不需要使用传统的索引结构。例如, Oracle 文本索引就使用了一组表来实现其索引概念。
位图联结索引( bitmap join index ):这为索引结构(而不是表)中的数据提供了一种逆规范化的 方法。例如,请考虑简单的 EMP 和 DEPT 表。有人可能会问这样一个问题: “ 多少人在位于波士顿的部门工作 ?“ EMP 有一个指向 DEPT 的外键,要想统计 LOC 值为 Boston 的部门中的员工人数,通常必须完成表联结,将 LOC 列联结至 EMP 记录来回答这个问题。通过使用位引 。
3、 基于函数的索引( function-based index )
这些就是 B* 树索引或位图索引,它将一个函数计算得到的结果存储在行的列中,而不是存储列数据本身。可以把基于函数的索引看作一个虚拟列(或派生列)上的索引,换句话说,这个列并不物理存储在表中。基于函数的索引可以用于加快形如 SELECT * FROM T W HERE FUNCTION(DATABASE_COLUMN) = SAME_VALUE 这样的查询,因为值 FUNCTION(DATABASE_COLUMN) 已经提前计算并存储在索引中。
索引组织表( index organized table ):索引组织表以 B* 树结构存储。堆表的数据行是以一种无组织的方式存储的(只要有可用的空间,就可以放数据),而 IOT 与之不同, IOT 中的数据要按主键的顺序存储和排序。对应用来说, IOT 表现得与 “ 常规 “ 表并无二致;需要使用 SQL 来正确地访问 IOT 。 IOT 对信息获取、空间系统和 OLAP 应用最为有用。 IOT 在上一章已经详细地讨论过。
oracle索引原理
![oracle索引原理](https://img.taocdn.com/s3/m/cbc15a08777f5acfa1c7aa00b52acfc788eb9f4f.png)
oracle索引原理
Oracle索引是一种数据结构,用于加速数据库查询操作。
它们通过创建和维护一个独立的数据结构来提高查询性能。
索引的原理是基于B树(或B+树)数据结构。
B树是一种平衡的树形结构,其中每个节点(除了根节点和叶节点)包含一个指针数组和一个关键字数组。
关键字数组按顺序排列,指针数组中的每个指针分别指向关键字数组中对应关键字的子树。
当在数据库表中创建索引时,Oracle会为该索引列的每个值创建一个索引条目,并将其按照关键字的顺序插入到B树中。
这样,当执行查询时,Oracle可以使用索引来快速定位到存储在表中特定关键字值处的行。
当执行查询时,Oracle首先搜索索引树,然后根据查找条件找到索引树中符合条件的关键字值所在的位置。
通过索引树中的指针,Oracle可以轻松地定位到对应数据行的位置,从而快速返回查询结果。
另外,Oracle索引还支持唯一性约束和主键约束。
唯一性索引确保索引列的值在所有索引中是唯一的,而主键索引则是一种特殊的唯一性索引,用于定义表的主键。
然而,索引的使用也存在一些限制。
首先,索引会占用额外的存储空间。
其次,当对表进行插入、更新或删除操作时,索引也需要相应地进行更新,这可能会导致性能下降。
因此,在设
计数据库时,需要权衡索引的数量和类型,以平衡查询性能和更新性能之间的折衷。
总之,Oracle索引是一种用于加快数据库查询性能的数据结构。
通过使用B树数据结构,索引能够快速定位到符合查询条件
的数据行,提高查询效率。
然而,索引的使用需要仔细权衡,以确保在查询和更新操作之间取得最佳性能平衡。
oracle查询索引注释
![oracle查询索引注释](https://img.taocdn.com/s3/m/5d5eb2598f9951e79b89680203d8ce2f0066650d.png)
oracle查询索引注释查询索引注释可以帮助我们更加深入地了解Oracle数据库索引的使用情况和性能瓶颈,进而提高查询效率和数据处理速度。
以下是关于Oracle查询索引注释的介绍和操作流程。
一、什么是索引注释1.1 索引定义在Oracle数据库中,索引是一种用于提高数据检索性能的数据结构。
它通过存储指向实际数据的指针来加速数据的访问速度。
为了提高索引的效率,我们通常使用B-tree或B+tree等数据结构来实现索引功能。
1.2 索引注释定义索引注释是在创建索引时,为索引添加说明性的文字或标注。
注释可以为数据库管理员或其他程序员提供索引的详细信息,如索引的实现方式、使用场景、优化策略等。
查询索引注释可以帮助我们更加深入地了解索引并进行更好的优化和性能调整。
二、Oracle查询索引注释的几种方法2.1 查询数据字典在Oracle数据库中,系统提供了一些基本的视图和表来存储数据库的元数据信息,其中包括存储索引和索引注释的表。
我们可以通过查询数据字典来获取索引注释信息。
例如,我们可以使用以下SQL语句查询所有索引的注释、表名和索引名:SELECT owner, table_name, index_name, commentsFROM all_ind_columnsWHERE comments IS NOT NULL;2.2 使用SQL Developer工具SQL Developer是Oracle提供的免费数据库管理工具,它可以帮助我们完成多种数据库管理任务,包括查询索引注释。
在SQL Developer中,我们可以使用以下方法查询索引注释:1. 在左侧“Connections”栏中选择要查询的数据库连接。
2. 展开“Tables”菜单,找到要查询的表,右键点击选择“Open Diagram”。
3. 在图表中,单击要查询的索引并查看“Properties”窗口,其中包括索引名称、注释等相关信息。
2.3 在PL/SQL Developer中查询PL/SQL Developer是一种流行的Oracle数据库开发工具,它可以帮助我们简化和加速复杂的数据库管理任务。
Oracle索引梳理系列(五)-Oracle索引种类之表簇索引(clusterindex)
![Oracle索引梳理系列(五)-Oracle索引种类之表簇索引(clusterindex)](https://img.taocdn.com/s3/m/eb80611d854769eae009581b6bd97f192279bf34.png)
Oracle索引梳理系列(五)-Oracle索引种类之表簇索引(clusterindex)表簇索引(cluster index)对于表簇索引⽽⾔,必须使⽤表簇。
由于簇索引与索引表簇关联紧密,⽆法单独拿出来总结,因此⼀并进⾏总结。
1.1 表簇的定义表簇是⼀组通过相同公共列(簇键),构成的表的集合。
如上图,右侧独⽴的两张表,employees员⼯表与departments部门表,通过簇键department_id列,构成了左侧的⼀个表簇(cluster)。
当构成表簇后,⼀个单独的数据块会包含多个表的数据⾏信息。
1.2 表簇的分类对于oracle数据库,主要⽀持两种表簇:索引聚簇以及哈希聚簇1.3 索引聚簇与哈希聚簇定位数据的区别索引聚簇:oracle使⽤簇索引,将簇键键值与相应数据所在数据块地址(DBA)关联进⾏数据定位。
哈希聚簇:oracle使⽤散列函数替代索引,计算出相应数据的物理存储位置,减少了针对索引块的I/O,进⽽实现了更快地定位。
1.4 表簇的意义通过簇键的关联,将不同表的相关数据⾏尽可能地存储在相同的数据块上,不但可以减少存储数据时使⽤的空间,⽽且可以降低数据访问时的磁盘I/O数量,提⾼访问速度。
1.5 表簇的优点对于表簇,在物理层⾯上,尽可能将与簇键关联的数据,存储在相同的数据块,进⽽减少块调⽤时的磁盘I/O操作(⾮簇关系的表,如emp表跟dept表中的各⾃⾏数据,⼀定不在同⼀个数据块。
块调⽤时读取更多的块。
原因:不同的segments,segment-extents-blocks)。
对于表簇,簇键的键值⽆论在被簇表中出现⼏次,数据块中,只存储⼀次,且与相关数据⾏⼀并存储,减少了占⽤的空间。
1.6 表簇使⽤的注意事项对于存在⼤量DML操作的表,不适合建⽴表簇。
对于需要经常进⾏全表扫描的表,不适合建⽴表簇。
(不再像⾮簇表那样,⼀个数据块中仅包含⼀张表中的数据,还包含了与簇键相关的其他表数据⾏的数据,这意味着扫描簇中单独的⼀张表,需要扫描更多的数据块)对于需要频繁进⾏TRUNCATE操作的表,不适合建⽴表簇。
oracle索引及使用原则
![oracle索引及使用原则](https://img.taocdn.com/s3/m/c1d8c13be3bd960590c69ec3d5bbfd0a7956d51a.png)
oracle索引及使用原则一、索引类型B-tree indexes 平衡二叉树,缺省的索引类型B-tree cluster indexes cluster的索引类型Hash cluster indexes cluster的hash索引类型Global and local indexes 与patitioned table相关的索引Reverse key indexes Oracle Real Application Cluster使用Bitmap indexes 位图索引,索相列的值属于一个很小的范围Function-based indexes 基于函数的索引Domain indexes二、使用索引的原则尽量在插入数据完成后建立索引,因为索引将导致插入数据变慢,特别是唯一索引在正确的表和列上建索引优化索引列顺序提高性能限制每个表的索引个数删除不需要的索引指定索引的block设置估计索引的大小设置存储参数指定索引使用的表空间建索引时使用并行使用nologing建立索引二,各种索引使用场合及建议(1)B*Tree索引。
常规索引,多用于oltp系统,快速定位行,应建立于高cardinality列(即列的唯一值除以行数为一个很大的值,存在很少的相同值)。
Create index indexname on tablename(columnname[columnname...])(2)反向索引。
B*Tree的衍生产物,应用于特殊场合,在ops环境加序列增加的列上建立,不适合做区域扫描。
Create index indexname on tablename(columnname[columnname...]) reverse(3)降序索引。
B*Tree的衍生产物,应用于有降序排列的搜索语句中,索引中储存了降序排列的索引码,提供了快速的降序搜索。
Create index indexname on tablename(columnname DESC[columnname...])(4)位图索引。
oracle索引创建及使用
![oracle索引创建及使用](https://img.taocdn.com/s3/m/579fdc9032d4b14e852458fb770bf78a65293a08.png)
oracle索引创建及使用摘要:1.Oracle 索引的定义与作用2.Oracle 索引的类型3.Oracle 索引的创建方法4.Oracle 索引的使用方法5.Oracle 索引的维护与优化正文:【Oracle 索引的定义与作用】Oracle 索引是Oracle 数据库中一种重要的对象,它可以提高查询数据的速度,有效地减少查询时间。
索引的作用类似于书籍的目录,可以让我们快速定位到需要的信息。
在数据库中,索引可以让数据库系统快速找到所需的数据,从而提高查询效率。
【Oracle 索引的类型】Oracle 索引分为以下几种类型:1.B-Tree 索引:B-Tree 索引是最常用的索引类型,适用于大多数场景。
它将数据分布在多个节点上,通过平衡树的结构来提高查询效率。
2.Bitmap 索引:Bitmap 索引适用于数据量较小且列值分布较为集中的场景。
它将每个列的值用二进制位表示,从而减少存储空间和提高查询速度。
3.Function-Based 索引:基于函数的索引,可以通过对函数结果进行索引来提高查询效率。
适用于对复杂计算结果的查询加速。
4.Global Temporary Index:全局临时索引,适用于需要在多个表空间之间进行查询的场景。
5.Partition Index:分区索引,适用于将大表按照一定规则划分为多个分区的场景,可以提高查询效率。
【Oracle 索引的创建方法】创建Oracle 索引可以使用CREATE INDEX 语句,基本语法如下:```CREATE INDEX index_nameON table_name (column_name)INDEX_TYPE index_type(column_name, column_name,...)EXTENTS (number_of_extents)LOGGING logging_optionOLOGGING nologging_optionSTORAGE (storage_option);```其中,index_name 为索引名称,table_name 为表名,column_name 为需要创建索引的列名,index_type 为索引类型,number_of_extents 为索引分区数量,logging_option 和nologging_option 分别为是否启用日志记录和是否禁用日志记录,storage_option 为存储选项。
oracle索引类型和索引方法
![oracle索引类型和索引方法](https://img.taocdn.com/s3/m/82b95452cd7931b765ce0508763231126fdb7752.png)
文章标题:深度解析Oracle索引类型和索引方法在数据库管理系统中,索引是一种用于加速查询的数据结构。
在Oracle数据库中,索引类型和索引方法有很多种,它们各自有着特定的适用场景和优缺点。
在本文中,我们将深度探讨Oracle索引类型和索引方法的分类、特点和应用,帮助读者更全面、深入地理解这一重要的数据库概念。
一、索引类型的概念和分类1. 什么是索引?在数据库中,索引是一种特殊的数据结构,用于加快对表中数据的访问速度。
通过索引,数据库可以快速定位到待查询数据的位置,避免了全表扫描,提高了查询效率。
2. 索引类型的分类在Oracle数据库中,索引主要分为B树索引、位图索引、哈希索引和函数索引等几种类型。
每种类型的索引都有着自己的特点和适用场景,需要根据实际业务情况来选择合适的索引类型。
二、B树索引1. B树索引的特点B树索引是最常见和最常用的索引类型,它适用于等值查询和范围查询。
B树索引采用多路平衡查找树的结构,能够快速定位到目标数据的位置。
2. B树索引的应用场景在需要频繁进行等值查询和范围查询的列上,建立B树索引可以有效提高查询效率,减少IO开销。
三、位图索引1. 位图索引的特点位图索引适用于具有较低基数(数据重复度高)的列,它通过位图来表示数据的位置,适用于大量等值查询的场景。
2. 位图索引的应用场景在需要频繁进行大量等值查询的列上,建立位图索引可以显著减少IO开销,提高查询效率。
四、哈希索引1. 哈希索引的特点哈希索引将索引列的值通过哈希算法映射成哈希值,适用于等值查询的场景。
哈希索引查询速度非常快,但不适用于范围查询。
2. 哈希索引的应用场景在需要频繁进行等值查询的列上,建立哈希索引可以提高查询速度,适用于OLTP系统中对主键的查询。
五、函数索引1. 函数索引的特点函数索引是通过对索引列应用函数来建立索引,适用于对列进行函数操作后进行查询的场景。
2. 函数索引的应用场景在对列进行函数操作后进行频繁查询的场景中,建立函数索引可以提高查询效率和灵活性。
oracle 索引类型大全
![oracle 索引类型大全](https://img.taocdn.com/s3/m/d4d6ee1ba76e58fafab00336.png)
行
值 1 2 3 4 5 6 7 8 9 10
Male 1 0 0 0 0 0 0 0 1 1
Female 0 1 1 1 0 0 1 1 0 0
Null 0 0 0 0 1 1 0 0 0 0
如果搜索where gender=’Male’,要统计性别是”Male”的列行数的话,Oracle很快就能从位图中找到共3行即第1,9,10行是符合条件的;如果要搜索where gender=’Male’ or gender=’Female’的列的行数的话,也很容易从位图中找到共8行即1,2,3,4,7,8,9,10行是符合条件的。如果要搜索表的值的话,那么Oracle会用内部的转换函数将位图中的相关信息转换成rowid来访问数据块。
2 union all select 'number',dump(reverse(2),16) from dual
3 union all select 'number',dump(reverse(3),16) from dual;
'NUMBE DUMP(REVERSE(1),1
------ -----------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=100 Bytes=400)
1 0 INDEX (RANGE SCAN) OF 'IND_DESC' (NON-UNIQUE) (Cost=2 Card=100 Bytes=400)
我们看到排序过程消失了,这是因为创建降序索引时Oracle已经把数据都按降序排好了。
提交完成。
SQL> select /*+ RULE*/* FROM test.testindex where upper(a)='A';
ORACLE索引,索引的建立、修改、删除
![ORACLE索引,索引的建立、修改、删除](https://img.taocdn.com/s3/m/94cfd1eb760bf78a6529647d27284b73f24236aa.png)
ORACLE索引,索引的建⽴、修改、删除原⽂地址⼀、简介索引是关系数据库中⽤于存放每⼀条记录的⼀种对象,主要⽬的是加快数据的读取速度和完整性检查。
建⽴索引是⼀项技术性要求⾼的⼯作。
⼀般在数据库设计阶段的与数据库结构⼀道考虑。
应⽤系统的性能直接与索引的合理直接有关。
⼆、语法2.1 创建索引CREATE INDEXCREATE[unique]INDEX[user.]indexON[user.]table (column[ASC | DESC][,column[ASC | DESC] ] ... )[CLUSTER [scheam.]cluster][INITRANS n][MAXTRANS n][PCTFREE n][STORAGE storage][TABLESPACE tablespace][NO SORT]其中:schema ORACLE模式,缺省即为当前帐户index索引名table创建索引的基表名column基表中的列名,⼀个索引最多有16列,long列、long raw列不能建索引列DESC、ASC缺省为ASC即升序排序CLUSTER 指定⼀个聚簇(Hash cluster不能建索引)INITRANS、MAXTRANS 指定初始和最⼤事务⼊⼝数Tablespace 表空间名STORAGE 存储参数,同create table中的storage.PCTFREE 索引数据块空闲空间的百分⽐(不能指定pctused)NOSORT 不(能)排序(存储时就已按升序,所以指出不再排序)2.1修改索引对于较早的Oracle版本,修改索引的主要任务是修改已存在索引的存储参数适应增长的需要或者重新建⽴索引。
⽽Oracle8I及以后的版本,可以对⽆⽤的空间进⾏合并。
这些的⼯作主要是由管理员来完成。
ALTER[UNIQUE]INDEX[user.]index[INITRANS n][MAXTRANS n]REBUILD[STORAGE n]其中:REBUILD 是根据原来的索引结构重新建⽴索引,实际是删除原来的索引后再重新建⽴。
oracle索引的结构
![oracle索引的结构](https://img.taocdn.com/s3/m/e7d88fc0690203d8ce2f0066f5335a8102d266d9.png)
oracle索引的结构Oracle索引的结构引言:在数据库管理系统中,索引是一种用于提高数据库查询性能的数据结构。
Oracle作为一种关系型数据库管理系统,也提供了索引的功能。
本文将介绍Oracle索引的结构及其作用。
一、概述索引是数据库中的一种数据结构,它能够加快查询速度和提高数据检索的效率。
在Oracle中,索引的结构主要有B树索引、位图索引和哈希索引。
二、B树索引B树索引是Oracle中最常用的索引结构之一。
它是一种平衡树结构,能够快速定位到指定的数据块。
B树索引的特点是高效的查询性能和较小的索引维护成本。
B树索引适用于范围查询和等值查询。
三、位图索引位图索引是一种基于位图的索引结构,它将索引的值映射为位图,每个位代表一个数据块的存在或缺失。
位图索引适用于数据分布相对均匀的列,例如性别、状态等。
它的优势是占用空间小,但对于数据更新较频繁的表,位图索引的维护成本较高。
四、哈希索引哈希索引是将索引的值通过哈希函数映射为一个唯一的哈希码,然后将哈希码作为索引。
哈希索引适用于等值查询,但不适用于范围查询。
哈希索引的优势是查询速度快,但它对于数据分布不均匀的列效果不佳。
五、索引的使用在使用索引时,需要根据具体的业务场景和数据特点选择合适的索引类型。
一般来说,对于频繁进行范围查询的列,可以使用B树索引;对于数据分布相对均匀的列,可以使用位图索引;对于等值查询较多的列,可以使用哈希索引。
六、索引的创建和维护在Oracle中,可以使用CREATE INDEX语句创建索引。
创建索引时需要考虑索引的列、表空间、索引类型等参数。
此外,索引的维护也是很重要的,可以使用ALTER INDEX语句对索引进行重建或重新命名。
七、索引的优化为了进一步提高查询性能,可以考虑对索引进行优化。
例如,可以使用索引覆盖来避免回表操作;可以使用索引合并来减少索引的数量;可以使用索引分区来提高查询效率等。
八、索引的注意事项在使用索引时,需要注意以下几点:1. 不要过度使用索引,过多的索引会增加数据库的维护成本。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle索引简单介绍更多Oracle资料下载,请收藏一、引言对数据库索引的关注从未淡出我的们的讨论,那么数据库索引是什么样的?聚集索引与非聚集索引有什么不同?希望本文对各位同仁有一定的帮助。
有不少存疑的地方,诚心希望各位不吝赐教指正,共同进步。
二、B-Tree我们常见的数据库系统,其索引使用的数据结构多是B-Tree或者B+Tree。
例如,MsSql使用的是B+Tree,Oracle及Sysbase使用的是B-Tree。
所以在最开始,简单地介绍一下B-Tree。
B-Tree不同于Binary Tree(二叉树,最多有两个子树),一棵M阶的B-Tree满足以下条件:1)每个结点至多有M个孩子;2)除根结点和叶结点外,其它每个结点至少有M/2个孩子;3)根结点至少有两个孩子(除非该树仅包含一个结点);4)所有叶结点在同一层,叶结点不包含任何关键字信息;5)有K个关键字的非叶结点恰好包含K+1个孩子;另外,对于一个结点,其内部的关键字是从小到大排序的。
以下是B-Tree(M=4)的样例:对于每个结点,主要包含一个关键字数组Key[],一个指针数组(指向儿子)Son[]。
在B-Tree 内,查找的流程是:使用顺序查找(数组长度较短时)或折半查找方法查找Key[]数组,若找到关键字K,则返回该结点的地址及K在Key[]中的位置;否则,可确定K在某个Key[i]和Key[i+1]之间,则从Son[i]所指的子结点继续查找,直到在某结点中查找成功;或直至找到叶结点且叶结点中的查找仍不成功时,查找过程失败。
接着,我们使用以下图片演示如何生成B-Tree(M=4,依次插入1~6):从图可见,当我们插入关键字4时,由于原结点已经满了,故进行分裂,基本按一半的原则进行分裂,然后取出中间的关键字2,升级(这里是成为根结点)。
其它的依类推,就是这样一个大概的过程。
三、数据库索引1.什么是索引在数据库中,索引的含义与日常意义上的“索引”一词并无多大区别(想想小时候查字典),它是用于提高数据库表数据访问速度的数据库对象。
A)索引可以避免全表扫描。
多数查询可以仅扫描少量索引页及数据页,而不是遍历所有数据页。
B)对于非聚集索引,有些查询甚至可以不访问数据页。
C)聚集索引可以避免数据插入操作集中于表的最后一个数据页。
D)一些情况下,索引还可用于避免排序操作。
当然,众所周知,虽然索引可以提高查询速度,但是它们也会导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引。
2.索引的存储一条索引记录中包含的基本信息包括:键值(即你定义索引时指定的所有字段的值)+逻辑指针(指向数据页或者另一索引页)。
当你为一张空表创建索引时,数据库系统将为你分配一个索引页,该索引页在你插入数据前一直是空的。
此页此时既是根结点,也是叶结点。
每当你往表中插入一行数据,数据库系统即向此根结点中插入一行索引记录。
当根结点满时,数据库系统大抵按以下步骤进行分裂:A)创建两个儿子结点B)将原根结点中的数据近似地拆成两半,分别写入新的两个儿子结点C)根结点中加上指向两个儿子结点的指针通常状况下,由于索引记录仅包含索引字段值(以及4-9字节的指针),索引实体比真实的数据行要小许多,索引页相较数据页来说要密集许多。
一个索引页可以存储数量更多的索引记录,这意味着在索引中查找时在I/O上占很大的优势,理解这一点有助于从本质上了解使用索引的优势。
3.索引的类型A)聚集索引,表数据按照索引的顺序来存储的。
对于聚集索引,叶子结点即存储了真实的数据行,不再有另外单独的数据页。
B)非聚集索引,表数据存储顺序与索引顺序无关。
对于非聚集索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,该层紧邻数据页,其行数量与数据表行数据量一致。
在一张表上只能创建一个聚集索引,因为真实数据的物理顺序只可能是一种。
如果一张表没有聚集索引,那么它被称为“堆集”(Heap)。
这样的表中的数据行没有特定的顺序,所有的新行将被添加的表的末尾位置。
4.聚集索引在聚集索引中,叶结点也即数据结点,所有数据行的存储顺序与索引的存储顺序一致。
1)聚集索引与查询操作如上图,我们在名字字段上建立聚集索引,当需要在根据此字段查找特定的记录时,数据库系统会根据特定的系统表查找的此索引的根,然后根据指针查找下一个,直到找到。
例如我们要查询“Green”,由于它介于[Bennet,Karsen],据此我们找到了索引页1007,在该页中“Green”介于[Greane,Hunter]间,据此我们找到叶结点1133(也即数据结点),并最终在此页中找以了目标数据行。
此次查询的IO包括3个索引页的查询(其中最后一次实际上是在数据页中查询)。
这里的查找可能是从磁盘读取(Physical Read)或是从缓存中读取(Logical Read),如果此表访问频率较高,那么索引树中较高层的索引很可能在缓存中被找到。
所以真正的IO可能小于上面的情况。
2)聚集索引与插入操作最简单的情况下,插入操作根据索引找到对应的数据页,然后通过挪动已有的记录为新数据腾出空间,最后插入数据。
如果数据页已满,则需要拆分数据页(页拆分是一种耗费资源的操作,一般数据库系统中会有相应的机制要尽量减少页拆分的次数,通常是通过为每页预留空间来实现):A)在该使用的数据段(extent)上分配新的数据页,如果数据段已满,则需要分配新段。
B)调整索引指针,这需要将相应的索引页读入内存并加锁。
C)大约有一半的数据行被归入新的数据页中。
D)如果表还有非聚集索引,则需要更新这些索引指向新的数据页。
特殊情况:A)如果新插入的一条记录包含很大的数据,可能会分配两个新数据页,其中之一用来存储新记录,另一存储从原页中拆分出来的数据。
B)通常数据库系统中会将重复的数据记录存储于相同的页中。
C)类似于自增列为聚集索引的,数据库系统可能并不拆分数据页,页只是简单的新添数据页。
3)聚集索引与删除操作删除行将导致其下方的数据行向上移动以填充删除记录造成的空白。
如果删除的行是该数据页中的最后一行,那么该数据页将被回收,相应的索引页中的记录将被删除。
如果回收的数据页位于跟该表的其它数据页相同的段上,那么它可能在随后的时间内被利用。
如果该数据页是该段的唯一一个数据页,则该段也被回收。
对于数据的删除操作,可能导致索引页中仅有一条记录,这时,该记录可能会被移至邻近的索引页中,原索引页将被回收,即所谓的“索引合并”。
5.非聚集索引非聚集索引与聚集索引相比:A)叶子结点并非数据结点B)叶子结点为每一真正的数据行存储一个“键-指针”对C)叶子结点中还存储了一个指针偏移量,根据页指针及指针偏移量可以定位到具体的数据行。
D)类似的,在除叶结点外的其它索引结点,存储的也是类似的内容,只不过它是指向下一级的索引页的。
聚集索引是一种稀疏索引,数据页上一级的索引页存储的是页指针,而不是行指针。
而对于非聚集索引,则是密集索引,在数据页的上一级索引页它为每一个数据行存储一条索引记录。
对于根与中间级的索引记录,它的结构包括:A)索引字段值B)RowId(即对应数据页的页指针+指针偏移量)。
在高层的索引页中包含RowId是为了当索引允许重复值时,当更改数据时精确定位数据行。
C)下一级索引页的指针对于叶子层的索引对象,它的结构包括:A)索引字段值B)RowId1)非聚集索引与查询操作针对上图,如果我们同样查找“Green”,那么一次查询操作将包含以下IO:3个索引页的读取+1个数据页的读取。
同样,由于缓存的关系,真实的IO实际可能要小于上面列出的。
2)非聚集索引与插入操作如果一张表包含一个非聚集索引但没有聚集索引,则新的数据将被插入到最末一个数据页中,然后非聚集索引将被更新。
如果也包含聚集索引,该聚集索引将被用于查找新行将要处于什么位置,随后,聚集索引、以及非聚集索引将被更新。
3)非聚集索引与删除操作如果在删除命令的Where子句中包含的列上,建有非聚集索引,那么该非聚集索引将被用于查找数据行的位置,数据删除之后,位于索引叶子上的对应记录也将被删除。
如果该表上有其它非聚集索引,则它们叶子结点上的相应数据也要删除。
如果删除的数据是该数所页中的唯一一条,则该页也被回收,同时需要更新各个索引树上的指针。
由于没有自动的合并功能,如果应用程序中有频繁的随机删除操作,最后可能导致表包含多个数据页,但每个页中只有少量数据。
6.索引覆盖索引覆盖是这样一种索引策略:当某一查询中包含的所需字段皆包含于一个索引中,此时索引将大大提高查询性能。
包含多个字段的索引,称为复合索引。
索引最多可以包含31个字段,索引记录最大长度为600B。
如果你在若干个字段上创建了一个复合的非聚集索引,且你的查询中所需S elect字段及Where,Order By,Group By,Having子句中所涉及的字段都包含在索引中,则只搜索索引页即可满足查询,而不需要访问数据页。
由于非聚集索引的叶结点包含所有数据行中的索引列值,使用这些结点即可返回真正的数据,这种情况称之为“索引覆盖”。
在索引覆盖的情况下,包含两种索引扫描:A)匹配索引扫描B)非匹配索引扫描1)匹配索引扫描此类索引扫描可以让我们省去访问数据页的步骤,当查询仅返回一行数据时,性能提高是有限的,但在范围查询的情况下,性能提高将随结果集数量的增长而增长。
针对此类扫描,索引必须包含查询中涉及的的所有字段,另外,还需要满足:Where子句中包含索引中的“引导列”(Leading Column),例如一个复合索引包含A,B,C,D四列,则A为“引导列”。
如果Where子句中所包含列是BCD或者BD等情况,则只能使用非匹配索引扫描。
2)非配置索引扫描正如上述,如果Where子句中不包含索引的导引列,那么将使用非配置索引扫描。
这最终导致扫描索引树上的所有叶子结点,当然,它的性能通常仍强于扫描所有的数据页。
Oracle 索引其他有关文档:/thread-297939-1-1.html11 / 11。