oracle索引基本分类
oracle主键索引和普通索引
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);
Oracle索引(Index)介绍使用
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)、(1000
oracle 索引存储原理
oracle 索引存储原理
Oracle索引存储原理
索引是数据库中用于加快查询速度的一种数据结构。在Oracle数据库中,索引的存储原理是非常重要的,它直接影响到数据库的性能和效率。本文将介绍Oracle索引存储的原理,帮助读者更好地理解索引的内部工作机制。
一、索引概述
索引是一种特殊的数据结构,它能够提供快速的数据访问路径。在数据库中,数据存储在表中,而索引则是基于表中的一个或多个列创建的。通过使用索引,数据库可以更快地定位和访问特定的数据行,而不需要扫描整个表。
二、B树索引
在Oracle数据库中,最常用的索引类型是B树索引。B树是一种平衡的多路搜索树,它能够在O(logN)的时间复杂度下进行查找、插入和删除操作。B树索引由多个节点组成,每个节点包含一个索引键和对应的数据块地址。
1. 叶子节点:B树索引的最底层是叶子节点,存储着索引键和对应的数据块地址。叶子节点按照索引键的顺序进行排序,使得范围查询成为可能。
2. 分支节点:分支节点存储着索引键和指向下一级节点的指针。分
支节点的数量通常比叶子节点少得多,这样可以减少索引的深度,提高查询效率。
3. 根节点:根节点是B树索引的顶层节点,它包含了指向所有分支节点的指针。
4. 索引键:索引键是用于定位数据行的值,它可以是一个或多个列的组合。在B树索引中,索引键按照一定的排序规则进行存储,使得查询操作更加高效。
三、索引存储方式
在Oracle数据库中,索引可以以不同的方式进行存储。常见的存储方式包括聚簇索引、非聚簇索引和位图索引。
1. 聚簇索引:在聚簇索引中,数据行按照索引键的顺序进行存储。如果表中的数据行按照索引键的范围进行访问,那么聚簇索引可以提供很好的性能。但是,如果索引键的插入顺序与数据行的插入顺序不一致,那么聚簇索引的效果会大打折扣。
Oracle数据库索引的优点与缺点的描述
数据库的索引分为:聚集索引,非聚集索引,唯一索引。 优点:方便了查询,在数据量大时排序更易查询 缺点:查询时需要进行重新排序,减少了效率。物理索引缺点 建立索引效率低,只能建一个 更有说服力的 为什么要创建索引呢?这是因为,创建索引可以大大提高系统的性能。 第一,通过创建唯一性索引,可以保证Oracle数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以显着减少查询中分组和排序的时间。第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。 也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?这种想法固然有其合理性,然而也有其片面性。虽然,索引有许多优点,但是,为表中的每一个列都增加索引,是非常不明智的。这是因为,增加索引也有许多不利的一个方面。 第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 索引是建立在Oracle数据库表中的某些列的上面。因此,在创建索引的时候,应该仔细考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列上创建索引,例如:在经常需要搜索的列上,可以加快搜索的速度; 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的; 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。 同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点:第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索
Oracle 分区索引和全局索引
Oracle 分区索引和全局索引
对于分区表而言,每个表分区对应一个分区段。当在分区表上建立索引时,即可以建立全局索引,也可以建立分区索引。对于合局索引,其索引数据会存放在一个索引段中;而对于分区索引,则索引数据都会被存放到几个索引分区段中。对索引进行分区的目的与对表进行分区是一样的,都是为了更加易于管理和维护巨型对象。
在Oracle中,一共可以为分区表建立三种类型的索引,下面分别介绍它们的特点和适用情况。
1.本地分区索引
本地分区索引是为分区表中的各个分区单独地建立分区,各个索引分区之间是相互独立的。本地分区索引相对比较简单,也比较容易管理。图10-4显示了本地分区索引和分区表之间的对应关系:
分区索引
分区表
图10-4 本地分区索引与分区表
在为分区表创建本地索引后,Oracle会自动对表的分区和索引的分区进行同步处理。如果为分区表添加新的分区后,Oracle会自动为新分区建立新的索引。与此相反,如果表的分区依然存在,则用户将不能删除它所对应用的索引分区。在删除表的分区时,系统会自动删除所对应的索引分区。
例如,下面的语句为范围分区表SALES_RANGE创建本地分区索引:
SQL> create index sales_local_idx
2 on sales_range(customer_id) local;
索引已创建。
2.全局分区索引
全局分区索引是对整个分区表建立的索引,然后再由Oracle对索引进行分区。全局分区索引的各个分区之间不是相互独立的,索引分区与分区表之间也不是简单的一对一关系。图10-5显示了全局分区索引与分区表的对应关系。
Oracle索引详解
一.索引介绍
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 | NOLOGGING
COMPUTE STATISTICS
NOCOMPRESS | COMPRESS<nn>
NOSORT | REVERSE
PARTITION | 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来减少占用空间并提高效率)
oracle 索引语句
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”的索引:
oracle索引原理详解
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. 优点:使用索引可以显著提高数据检索速度,减少查询时间。此外,索引还可以用于优化复杂查询的性能。
oracle索引介绍(图文详解)
oracle索引介绍(图⽂详解)
对于数据库来说,索引是⼀个必选项,但对于现在的各种⼤型数据库来说,索引可以⼤⼤提⾼数据库的性能,以⾄于它变成了数据库不可缺少的⼀部分。
索引分类:
逻辑分类
single column or concatenated 对⼀列或多列建所引
unique or nonunique 唯⼀的和⾮唯⼀的所引,也就是对某⼀列或⼏列的键值(key)是否是唯⼀的。
Function-based 基于某些函数索引,当执⾏某些函数时需要对其进⾏计算,可以将某些函数的计算结果事先保存并加以索引,提⾼效率。
Doman 索引数据库以外的数据,使⽤相对较少
物理分类
B-Tree :normal or reverse key B-Tree索引也是我们传统上常见所理解的索引,它⼜可以分为正常所引和倒序索引。Bitmap :位图所引,后⾯会细讲
B-Tree 索引
B-Tree index 也是我们传统上常见所理解的索引。B-tree (balance tree)即平衡树,左右两个分⽀相对平衡。
B-Tree index
Root为根节点,branch 为分⽀节点,leaf 到最下⾯⼀层称为叶⼦节点。每个节点表⽰⼀层,当查找某⼀数据时先读根节点,再读⽀节点,最后找到叶⼦节点。叶⼦节点会存放index entry (索引⼊⼝),每个索引⼊⼝对应⼀条记录。
Index entry 的组成部分:
Indexentry entry header 存放⼀些控制信息。
Key column length 某⼀key的长度
oracle的索引类型
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数据库约束、索引,enable和disable用处
oracle数据库约束、索引,enable和disable⽤处
1.数据库索引
索引:索引是对数据库表中⼀列或多列的值进⾏排序的⼀种结构
索引分类:主键索引(PRIMAY KEY)、唯⼀索引(UNIQUE)、常规索引(INDEX)、全⽂索引(FULLTEXT)
常规索引 CREATE INDEX 索引名 ON 表名 (字段名)
唯⼀索引 CREATE UNIQUE INDEX 索引名 ON 表名 (字段名)
2.数据库约束
约束:数据库约束时防⽌⾮法记录的规则
约束分类:
主键约束(Primay Key Coustraint):唯⼀性,⾮空性,⼀个表只能有主键,创建主键时会⾃动创建主键索引
ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY (字段名)
唯⼀约束(Unique Counstraint):唯⼀性,可以空,但只能有⼀个空,⼀张表可以有多个唯⼀约束,创建唯⼀约束时会⾃动创建唯⼀索引ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段)
检查约束(Check Counstraint):对该列数据的范围、格式的限制(如:年龄、性别等)
ALTER TABLE 表名 CHECK (字段约束)
默认约束(Default Counstraint):该数据的默认值
ALTER TABLE 表名 ALTER 字段名 SET DEFAULT '默认值'
外键约束(Foreign Key Counstraint):需要建⽴两表间的关系并引⽤主表的列
ORACLE索引的类型
Oracle 提供了多种不同类型的索引以供使用。简单地说, Oracle 中包括如下索引:1、 B* 树索引这些是我所说的 “ 传统 “ 索引。到目前为止,这是 Oracle 和大多数其他数据库中最常用的索引。 B* 树的构造类似于二叉树,能根据键提供一行或一个行集的快速访问,通常只需很少的读操作就能找到正确的行。不过,需要注意重要的一点, ” B* 树 “ 中的 ” B “ 不代表二叉( binary ),而代表平衡( b alanced )。B* 树索引并不是一颗二叉树,这一点在介绍如何在磁盘上物理地存储 B* 树时就会了解到。 B* 树索引有以下子类型:索引组织表( index organized table ):索引组织表以 B* 树结构存储。堆表的数据行是以一种无组织的方式存储的(只要有可用的空间,就可以放数据),而 IOT 与之不同, IOT 中的数据要按主键的顺序存储和排序。对应用来说, IOT 表现得与 “ 常规 “ 表并无二致;需要使用 SQL 来正确地访问 IOT 。 IOT 对信息获取、空间系统和 OLAP 应用最为有用。 IOT 在上一章已经详细地讨论过。B*树聚簇索引( B*tree cluster index )这些是传统 B* 树索引的一个变体(只是稍有变化)。 B* 树聚簇索引用于对聚簇键建立索引(见第 11. 章中 “ 索引聚簇表 “ 一节),所以这一章不再讨论。在传统 B* 树中 ,键都指向一行;而 B* 树聚簇不同,一个聚簇键会指向一个块,其中包含与这个聚簇键相关的多行。降序索引( descending index ):降序索引允许数据在索引结构中按 “ 从大到小 “ 的顺序(降序)排序,而不是按 ” 从小到大 “ 的顺序(升序)排序。我们会解释为什么降序索引很重要,并说明降序索引如何工作。反向键索引( reverse key index ):这也是 B* 树索引,只不过键中的字节会 “ 反转 “ 。利用反向键索引,如果索引中填充的是递增的值,索引条目在索引中可以得到更均匀的分布。例如,如果使用一个序列来生成主键,这个序列将生成诸如 987500 、 987501 、 987502 等值。这些值是顺序的,所以倘若使用一 个传统的 B* 树索引,这些值就可能放在同一个右侧块上,这就加剧了对这一块的竞争。利用反向键, Oracl e则会逻辑地对 205789 、 105789 、 005789 等建立索引。 Oracle 将数据放在索引中之前,将先 把所存储数据的字节反转,这样原来可能在索引中相邻放置的值在字节反转之后就会相距很远。通过反转字节,对索引的插入就会分布到多个块上。2、 位图索引( bitmap index )在一颗 B* 树中,通常索引条目和行之间存在一种一对一的关系:一个 索引条目就指向一行。而对于位图索引,一个索引条目则使用一个位图同时指
Oracle数据库查询基础教程
Oracle数据库查询基础教程第一章:Oracle数据库概述
Oracle数据库是一种关系型数据库管理系统,广泛应用于企业级应用系统中。本章将介绍Oracle数据库的特点、架构以及相关的基本概念。
1.1 Oracle数据库的特点
Oracle数据库具有以下几个特点:
- 强大的数据处理能力:支持大规模数据存储和高并发访问。
- 高可靠性和可扩展性:通过多种机制保证数据的安全性和可用性。
- 丰富的功能和工具支持:包括数据管理、安全性控制、性能优化等功能。
1.2 Oracle数据库的架构
Oracle数据库采用了多进程架构,核心组件包括实例进程和后台进程。实例进程负责与用户的交互,而后台进程则负责数据库的管理和维护。
1.3 常用的数据类型
Oracle数据库支持各种基本数据类型,包括字符型、数值型、
日期型等。此外,还支持大对象(LOB)类型,用于存储大量的
文本、图像等非结构化数据。
第二章:Oracle SQL语句的基本结构
SQL(Structured Query Language)是用于与数据库进行交互的
标准化语言。本章将介绍Oracle SQL语句的基本结构,包括SELECT、INSERT、UPDATE、DELETE等常用语句的使用方法。
2.1 SELECT语句
SELECT语句用于从一个或多个表中检索数据。语法结构如下:```
SELECT 列名
FROM 表名
WHERE 条件
```
其中,列名表示需要检索的列,表名表示数据来源的表,条件
是可选的,用于筛选出符合条件的数据。
2.2 INSERT语句
INSERT语句用于向数据库表中插入新的数据。语法结构如下:
oracle创建索引表空间
oracle创建索引表空间Oracle 的索引可分为5种,它们包括唯⼀索引、组合索引、反向键索引、位图索引和基于函数的索引。
1、创建索引的标准语法
CREATE INDEX 索引名 ON 表名 (列名)TABLESPACE 表空间名;
例如:
CREATE INDEX idx_of_imsi ON uim_auth_file(imsi) TABLESPACE users;
2、创建唯⼀索引
CREATE unique INDEX 索引名 ON 表名 (列名)TABLESPACE 表空间名;
例如:
CREATE UNIQUE INDEX idx_of_imsi ON uim_auth_file(imsi) TABLESPACE users;
3、创建组合索引
CREATE INDEX 索引名 ON 表名 (列名1,列名2)TABLESPACE 表空间名;
例如:
CREATE INDEX idx_of_imsi ON uim_auth_file(iccid,imsi) TABLESPACE users;
4、创建反向键索引
CREATE INDEX 索引名 ON 表名 (列名) reverseTABLESPACE 表空间名;
例如:
CREATE INDEX idx_of_imsi ON uim_auth_file(imsi) reverse TABLESPACE users;
5、创建位图索引
CREATE BITMAP INDEX 索引名 ON 表名(列名) TABLESPACE 表空间名;
例如:
CREATE BITMAP INDEX ssex_bitmap_index ON student(sex) TABLESPACE users;
oracle 索引类型大全
Oracle索引1. 存储类型索引在各种关系型数据库系统中都是举足轻重的组成部分,其对于提高检索数据的速度起至关重要的作用。在Oracle中,索引基本分为以下几种:B*Tree索引,反向索引,降序索引,位图索引,函数索引,interMedia全文索引等。本文主要就前6种索引进行分析。 首先给出各种索引的简要解释: b*tree index:几乎所有的关系型数据库中都有b*tree类型索引,也是被最多使用的。其树结构与二叉树比较类似,根据rid快速定位所访问的行。 反向索引:反转了b*tree索引码中的字节,是索引条目分配更均匀,多用于并行服务器环境下,用于减少索引叶的竞争。 降序索引:8i中新出现的索引类型,针对逆向排序的查询。 位图索引:使用位图来管理与数据行的对应关系,多用于OLAP系统。 函数索引:这种索引中保存了数据列基于function返回的值,在select * from table where function(column)=value这种类型的语句中起作用。B*Tree索引 B*Tree索引是最常见的索引结构,默认建立的索引就是这种类型的索引。B*Tree索引在检索高基数数据列(高基数数据列是指该列有很多不同的值)时提供了最好的性能。当取出的行数占总行数比例较小时B-Tree索引比全表检索提供了更有效的方法。但当检查的范围超过表的10%时就不能提高取回数据的性能。B-Tree索引是基于二叉树的,由分支块(branch block)和叶块(leaf block)组成。在树结构中,位于最底层底块被称为叶块,包含每个被索引列的值和行所对应的rowid。在叶节点的上面是分支块,用来导航结构,包含了索引列(关键字)范围和另一索引块的地址,如图26-1所示。 假设我们要找索引中值为80的行,从索引树的最上层入口开始,定位到大于等于50,然后往左找,找到第2个分支块,定位为75-100,最后再定位到叶块上,找到80所对应的rowid,然后根据rowid去读取数据块获取数据。如果查询条件是范围选择的,比如where column >20 and column <80,那么会先定位到第一个包含20的叶块,然后横向查找其他的叶块,直到找到包含80的块为止,不用每次都从入口进去再重新定位。 反向索引 反向索引是B*Tree索引的一个分支,它的设计是为了运用在某些特定的环境下的。Oracle推出它的主要目的就是为了降低在并行服务器(Oracle Parallel Server)环境下索引叶块的争用。当B*Tree索引中有一列是由递增的序列号产生的话,那么这些索引信息基本上分布在同一个叶块,当用户修改或访问相似的列时,索引块很容易产生争用。反向索引中的索引码将会被分布到各个索引块中,减少了争用。反向索
oracle索引创建及使用
oracle索引创建及使用
【最新版】
目录
1.Oracle 索引的定义与作用
2.Oracle 索引的类型
3.Oracle 索引的创建方法
4.Oracle 索引的使用方法
5.Oracle 索引的维护与优化
正文
【1.Oracle 索引的定义与作用】
Oracle 索引是 Oracle 数据库中一种重要的数据结构,它可以提高查询数据的速度,有效降低数据库的 I/O 操作。索引的作用类似于书籍的目录,可以让用户快速定位到所需的数据,从而提高查询效率。
【2.Oracle 索引的类型】
Oracle 索引主要有以下几种类型:
B-Tree 索引:B-Tree 索引是最常用的索引类型,适用于大多数场景。它将数据分成多个节点,每个节点包含一定数量的索引项,可以有效提高查询效率。
Hash 索引:Hash 索引适用于对数据进行精确查询的场景。它通过哈希函数将数据转换为索引值,然后将索引值映射到对应的存储位置,从而实现快速查询。
RID 索引:RID 索引是 Oracle 数据库中的一种特殊索引,主要用于优化全表扫描。它将数据文件和索引文件紧密结合,可以有效提高全表扫描的性能。
【3.Oracle 索引的创建方法】
创建 Oracle 索引的方法如下:
1.使用 CREATE INDEX 语句创建索引:这是最常用的创建索引方法,可以通过命令行或 SQL*Plus 等方式执行。
CREATE INDEX index_name
ON table_name (column_name);
2.使用 ALTER TABLE 语句创建索引:这种方法可以在不修改表结构的情况下创建索引。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
oracle索引基本分类法分类
逻辑上:
Single column 单行索引
Concatenated 多行索引
Unique 唯一索引
NonUnique 非唯一索引
Function-based函数索引
Domain 域索引
物理上:
Partitioned 分区索引
NonPartitioned 非分区索引
B-tree:
Normal 正常型B树
Rever Key 反转型B树
Bitmap 位图索引
索引结构:
B-tree:
适合与大量的增、删、改(OLTP);
不能用包含OR操作符的查询;
适合高基数的列(唯一值多)
典型的树状结构;
每个结点都是数据块;
大多都是物理上一层、两层或三层不定,逻辑上三层;
叶子块数据是排序的,从左向右递增;
在分支块和根块中放的是索引的范围;
Bitmap:
适合与决策支持系统;
做UPDATE代价非常高;
非常适合OR操作符的查询;
基数比较少的时候才能建位图索引;
树型结构:
索引头
开始ROWID,结束ROWID(先列出索引的最大范围)
BITMAP
每一个BIT对应着一个ROWID,它的值是1还是0,如果是1,表示着BIT 对应的ROWID有值;
=============================================== ======================
Oracle的索引主要包含两类:BTree和位图索引。默认情况下大多使用Btree 索引,该索引就是通常所见唯一索引、聚簇索引等等,Btree用在OLTP,加快查询速度。位图索引是Oracle的比较引人注目的地方,其主要用在OLAP(联机数据分析)方面,也就是数据仓库方面用到,目的是在加快查询速度是,节省存储空间。通常情况下,索引都要耗费比较大的存储空间,位图采用了压缩技术实现磁盘空间缩减。Btree用在高基数(即列的数据相异度大),位图用在低基数列。位图索引的基本原理是在索引中使用位图而不是列值。通常在事实表和维表的键之间有很低的集的势(cardinality),使用位图索引,存储更为有效,与B*Tree 索引比较起来,只需要更少的存储空间,这样每次读取可以读到更多的记录,而且与B*Tree索引相比,位图索引将比较,连接和聚集都变成了位算术运算,大大减少了运行时间,从而得到性能上的极大的提升。
在Oracle中如何合理的使用位图索引?以下的几个事项应该考虑。
*如果要使用位图索引,初始化参数STAR_TRANSFORMATION_ENABLED 应该设置为TRUE.
*优化模式应该是CBO。对于数据仓库的环境中,总是应该考虑使用CBO (COST-BASEDOPTIMIZER)。
*位图索引应该建立在每一个事实表的外键列上。(这只是一个一般的规则.)
此外,对于数据表中的cardinality如何客观的确定也是一个问题,一万条数据中只包含3个值的集和算是低的了,那么一亿条记录中包含3万条记录算不算低的呢?对于这样的情况,建议几行一下数据的模拟测试,一般来说,在数据仓库环境中,位图索引的性能要好于B*Tree索引。还要注意位图索引不是为OLTP 数据库设计的,不应该在OLTP数据库中大量的使用它,尤其是对那些有更新操作的表。
==================================================================== ==========
B*Tree索引
B*Tree索引是最常见的索引结构,默认建立的索引就是这种类型的索引。B*Tree索引在检索高基数数据列(高基数数据列是指该列有很多不同的值)时提供了最好的性能。当取出的行数占总行数比例较小时B-Tree索引比全表检索提供了更有效的方法。但当检查的范围超过表的10%时就不能提高取回数据的性能。B-Tree索引是基于二叉树的,由分支块(branch block)和叶块(leaf block)组成。在树结构中,位于最底层底块被称为叶块,包含每个被索引列的值和行所对应的rowid。在叶节点的上面是分支块,用来导航结构,包含了索引列(关键字)范围和另一索引块的地址,如图26-1所示。
假设我们要找索引中值为80的行,从索引树的最上层入口开始,定位到大于等于50,然后往左找,找到第2个分支块,定位为75-100,最后再定位到叶块上,找到80所对应的rowid,然后根据rowid去读取数据块获取数据。如果查询条件是范围选择的,比如where column >20 and column <80,那么会先定位到第一个包含20的叶块,然后横向查找其他的叶块,直到找到包含80的块为止,不用每次都从入口进去再重新定位。
反向索引
反向索引是B*Tree索引的一个分支,它的设计是为了运用在某些特定的环境下的。Oracle推出它的主要目的就是为了降低在并行服务器(Oracle Parallel Server)环境下索引叶块的争用。当B*Tree索引中有一列是由递增的序列号产生的话,那么这些索引信息基本上分布在同一个叶块,当用户修改或访问相似的列时,索引块很容易产生争用。反向索引中的索引码将会被分布到各个索引块中,减少了争用。反向索引反转了索引码中每列的字节,通过dump()函数我们可以清楚得看见它做了什么。举个例子:1,2,3三个连续的数,用dump()函数看它们在Oracle内部的表示方法。
SQL> select 'number',dump(1,16) from dual
2 union all select 'number',dump(2,16) from dual
3 union all select 'number',dump(3,16) from dual;
'NUMBE DUMP(1,16)
------ -----------------
number Typ=2 Len=2: c1,2 (1)
number Typ=2 Len=2: c1,3 (2)
number Typ=2 Len=2: c1,4 (3)
再对比一下反向以后的情况:
SQL> select 'number',dump(reverse(1),16) from dual
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
------ -----------------
number Typ=2 Len=2: 2,c1 (1)
number Typ=2 Len=2: 3,c1 (2)
number Typ=2 Len=2: 4,c1 (3)
我们发现索引码的结构整个颠倒过来了,这样1,2,3个索引码基本上不会出现在同一个叶块里,所以减少了争用。不过反向索引又一个缺点就是不能在所有使用常规索引的地方使用。在范围搜索中其不能被使用,例如,where column>value,因为在索引的叶块中索引码没有分类,所以不能通过搜索相邻叶块完成区域扫描。