oracle索引类型有哪些(oracle数据库索引种类,分别什么情况下使用)

本文目录
- oracle数据库索引种类,分别什么情况下使用
- oracle索引的分类
- Oracle索引的索引的分类
- Oracle数据库中的最常用的索引有哪些
- ORACLE创建索引的时候是如何控制所添加索引的类型的例如btree,位图神马的
- oracle数据库中有哪几种类型引索
- Oracle数据库中如何选择合适的索引类型
oracle数据库索引种类,分别什么情况下使用
1.
b-tree索引
Oracle数据库中最常见的索引类型是b-tree索引,也就是B-树索引,以其同名的计算科学结构命名。CREATE
INDEX语句时,默认就是在创建b-tree索引。没有特别规定可用于任何情况。
2.
位图索引(bitmap
index)
位图索引特定于该列只有几个枚举值的情况,比如性别字段,标示字段比如只有0和1的情况。
3.
基于函数的索引
比如经常对某个字段做查询的时候是带函数操作的,那么此时建一个函数索引就有价值了。
4.
分区索引和全局索引
这2个是用于分区表的时候。前者是分区内索引,后者是全表索引
5.
反向索引(REVERSE)
这个索引不常见,但是特定情况特别有效,比如一个varchar(5)位字段(员工编号)含值
(10001,10002,10033,10005,10016..)
这种情况默认索引分布过于密集,不能利用好服务器的并行
但是反向之后10001,20001,33001,50001,61001就有了一个很好的分布,能高效的利用好并行运算。
6.HASH索引
HASH索引可能是访问数据库中数据的最快方法,但它也有自身的缺点。集群键上不同值的数目必须在创建HASH集群之前就要知道。需要在创建HASH集群的时候指定这个值。使用HASH索引必须要使用HASH集群。
oracle索引的分类
B树索引和位图索引是按照索引的组织方式来分类的。
B树是指索引的组织方式是以索引块为节点的B+树,位图索引是按照索引值排列的。
函数索引:
顾名思义,这是指对列值做了函数之后存储的一种索引方式;
聚簇索引和非聚簇索引:
这是按照索引与table的关系区分的,如果table中的内容按照索引的顺序存储,则该索引为聚簇索引,否则为非聚簇索引。
1.1 B-树索引
B-树索引在oracle中是一个通用索引, 在创建索引时它就是默认的索引类型. B树索引可以是单列也可以是复合索引, B-树索引最多可以包括32列.
树叶块包含了索引值/ ROWID, 以及前一个和后一个树叶块的数据块地址(DBA). Oracle可以从两个方向遍历这个二叉树. B-树索引保存了在索引列上有值的每个数据行的ROWID值. Oracle不会对索引列上存有空值的行进行索引. 如果索引是多个列的组合索引, 而其中列上包含有空值, 这一行就会处于包含空值的索引列中, 且被处理为空.
1.2 位图索引
在位图索引中,oracle为每个唯一键创建一个位图, 然后把与键值所关联的ROWID保存为位图. 尽管位图索引最多可达30个列, 但通常他们都只用于少量的列.
对于多个B-树索引来说, 每个索引返回一组ROWID, 这组ROWID必须与其他索引所产生的ROWID范围进行比较. 每个结果集必须被比较,组合并再与其他结果集进行比较, 直到最终的结果集被确定. 由于在位图中只存储一次一个唯一列, 当列不是B-树索引的唯一列时就节省了很多空间.
在一个查询中合并多个B-树位图索引后,可以使性能显著提高. 位图索引使用固定长度的数据类型要比可变长度的数据类型好. 大的块也会提高对位图索引的存储和读取性能.
建议不要在一些联机事务处理(OLTP)应用程序中使用位图索引. B-树索引的索引值中包含ROWID, 这样oracle就可以在行级别锁上锁定索引. 位图索引被存储为压缩的索引值, 其中包含了一个范围的ROWID. 因此Oracle必须对一个给定值锁定所有范围内的ROWID. 这种锁定可能在某些DML语句中造成死锁.
1.3 HASH索引
1.4 索引编排表
1.5 反转键索引
1.6 基于函数的索引
1.7 分区索引
分区索引(partitional index)就是简单地把一个索引分成多个片段. 通过把一个索引分成多个片段, 您可以访问更小的片段. 并且可以把这些片段分别存储在不同的硬盘上(避免IO问题);
分区索引按照其前导列是否为分区字段可以区分为有前缀的索引和无前缀的索引两种.
Oracle索引的索引的分类
在关系数据库中,每一行都由一个行唯一标识RowID。RowID包括该行所在的文件、在文件中的块数和块中的行号。索引中包含一个索引条目,每一个索引条目都有一个键值和一个RowID,其中键值可以是一列或者多列的组合。 (一)索引按存储方法分类,可以分为2类:B*树索引和位图索引。 (1)B*树索引的存储结构类似书的索引结构,有分支和叶两种类型的存储数据块,分支块相当于书的大目录,叶块相当于索引到的具体的书页。Oracle用B*树机制存储索引条目,以保证用最短路径访问键值。默认情况下大多使用B*树索引,该索引就是通常所见的唯一索引、逆序索引。 (2)位图索引存储主要用于节省空间,减少oracle对数据块的访问。它采用位图偏移方式来与表的行ID号对应,采用位图索引一般是重复值太多的表字段。位图索引之所以在实际密集型OLTP(联机事物处理)中用的比较少,是因为OLTP会对表进行大量的删除、修改、新建操作。Oracle每次进行操作都会对要操作的数据块加锁。以防止多人操作容易产生的数据库锁等待甚至死锁现象。在OLAP(联机分析处理)中应用位图有优势,因为OLAP中大部分是对数据库的查询操作,而且一般采用数据仓库技术,所以大量数据采用位图索引节省空间比较明显。当创建表的命令中包含有唯一性关键字时,不能创建位图索引,创建全局分区索引时也不能用位图索引。 (二)索引按功能和索引对象分还有以下类型。 (1)唯一索引意味着不会有两行记录相同的索引键值。唯一索引表中的记录没有RowID,不能再对其建立其他索引。在oracle10g中,要建立唯一索引,必须在表中设置主关键字,建立了唯一索引的表只按照该唯一索引结构排序。 (2)非唯一索引不对索引列的值进行唯一性限制。 (3)分区索引是指索引可以分散地存在于多个不同的表空间中,其优点是可以提高数据查询的效率。 (4)未排序索引也称为正向索引。Oracle10g数据库中的行是按升序排序的,创建索引时不必指定对其排序而使用默认的顺序。 (5)逆序索引也称反向索引。该索引同样保持列按顺序排列,但是颠倒已索引的每列的字节。 (6)基于函数的索引是指索引中的一列或者多列是一个函数或者表达式,索引根据函数或表达式计算索引列的值。可以将基于函数的索引建立创建成位图索引。 另外,按照索引所包含的列数可以把索引分为单列索引和复合索引。索引列只有一列的索引为单列索引,对多列同时索引称为复合索引。
Oracle数据库中的最常用的索引有哪些
1. b-tree索引
Oracle数据库中最常见的索引类型是b-tree索引,也就是B-树索引,以其同名的计算科学结构命名。CREATE
INDEX语句时,默认就是在创建b-tree索引。没有特别规定可用于任何情况。
2. 位图索引(bitmap index)
位图索引特定于该列只有几个枚举值的情况,比如性别字段,标示字段比如只有0和1的情况。
3. 基于函数的索引
比如经常对某个字段做查询的时候是带函数操作的,那么此时建一个函数索引就有价值了。
ORACLE创建索引的时候是如何控制所添加索引的类型的例如btree,位图神马的
您好 波士顿,
我看到你的图标发现以前回答过你的几个问题 :) 希望大家共勉
ORACLE中有2中Index.
普通类型 (数据结构为B tree)
Bit Map Index
只有这2种。
您的问题是“ORACLE 如何控制” 。 这个不是Oracle控制的, 是由人控制的。 你在建立索引的时候选择了BIT MAP 那就是BIT MAP。 如果纯粹是建立一个INDEX 、或者主键 外键, 而没有特别说明, 那么就是普通的 B TREE 结构。
这个是你想要的回答吗?
oracle数据库中有哪几种类型引索
有两大类索引:
唯一索引:
对于被索引列,索引表中每一行包含一个唯一值;
非唯一索引:
行中的索引值可重复;
从索引中读取数据的操作取决于使用的索引类型和查询中访问索引的方法。
Oracle数据库中如何选择合适的索引类型
凭借字典的目录,我们可以非常迅速的找到我们所需要的条目。数据库也是如此。凭借Oracle数据库的索引,相关语句可以迅速的定位记录的位置,而不必去定位整个表。 虽然说,在表中是否创建索引,不会影响到Oracle数据库的使用,也不会影响数据库语句的使用。这就好像即使字典没有目录的话,用户仍然可以使用它一样。可是,若字典没有目录,那么可想而知,用户要查某个条目的话,其不得不翻遍整本字典。数据库也是如此。若没有建立相关索引的话,则数据库在查询记录的时候,不得不去查询整个表。当表中的记录比较多的时候,其查询效率就会很低。所以,合适的索引,是提高数据库运行效率的一个很好的工具。 不过,并不是说表上的索引越多越好。过之而不及。故在数据库设计过程中,还是需要为表选择一些合适的索引。宁缺勿滥,这是建立索引时的一个遵循标准。在理论上,虽然一个表可以设置无限的索引。但是,数据库管理员需要知道,表中的索引越多,维护索引所需要的开销也就越大。每当数据表中记录有增加、删除、更新变化的时候,数据库系统都需要对所有索引进行更新。故数据库表中的索引绝对不是多多益善。具体来说,在索引建立上,笔者对大家有如下建议。 建议一:在基数小的字段上要善于使用位图索引。 基数是位图索引中的一个基本的定义,它是指数据库表中某个字段内容中不重复的数值。如在员工信息表中的性别字段,一般就只有男跟女两个值,所以,其基数为2;婚姻状况字段的话,则其只有已婚、未婚、离婚三种状态,其基数就为3;民族一览内也是只有有限的几个值。 对于要查询基数小的字段,如现在用户想查找所有婚姻状况为“已婚”的“女性”时,利用位图索引可以提高查询的效率。这主要是因为标准索引是通过在索引中保存排序过的索引列以及对应的ROWID来实现的。若我们在基数小的列上建立标准索引的话,则其会返回大量的记录。 而当我们在创建位图索引的时候,在Oracle会对整个表进行扫描,并且会为索引列的每个取值建立一个位图。若内容相同,则在位图上会以一个相同的数字表示。此时,若这个字段的基数比较小的话,则若需要实现对整个字段的查询的话,效率就会非常的高。因为此时,数据库只要位图中数字相同的内容找出来即可。 除了在数据表某列基数比较小的情况下,采用位图索引外,我们往往在一些特殊的情况下,也会建议采用位图索引。最常见的情况是,在Where限制条件中,若我们多次采用AND或者OR条件时,也建议采用位图索引。因为当一个查询饮用了一些部署了位图索引的列的时候,这些位图可以很方便的与AND或者Or 运算符操作结合以快速的找出用户所需要的记录。 但是,这里要注意,不是在条件语句中包含运算符的时候,采用位图索引都能够提供比较高的效率。一般来说,只有AND 或者OR运算符的时候,位图索引才会比较具有优势。若此时用户采用大于号或者不等于号作为条件语句中的限制条件的时候,则往往采用标准索引具有更大的优势。 所以,笔者在数据库设置中,一般只有在三种情况下才采用位图索引。一是列的基数比较小,而有可能需要根据这些字段的内容查找相关的记录;二是在条件语句中,用到了AND或者OR运算符的时候。除了这两种情况外,最好能够采用其他适合的索引。第三种情况是,需要用到NULL作为查询的限制条件。因为标准查询一般情况下,会忽略所有的NULL值列。也就是说,若需要查询“所有没有身份证号码”的员工的信息的时候,标准索引并不能够起到加速查询速度的作用。此时,就需要采用位图索引。因为位图索引会记录相关的NULL值列信息。 建议二:创建索引的一些限制条件。 并不说,表或者列建立的索引越多越好。相反,索引建的越多,有时会反而会影响数据库运行的整体性能。所以,在建立索引的时候,仍然会有一些限制条件。 一是不要对一些记录内容比较少的表建立索引。在一个应用系统设计的时候,如设计一个ERP系统的数据库,其虽然有几千张表。但是,并不是每张表都有大量记录的。相反,其中有近一半左右的数据表,可能其存储的数据不会超过百条。如员工登陆帐户密码表、企业部门信息表等等。对于这些记录内容比较少的表,我们建立最好不要为其建立索引。无论是表上的,还是字段上,都不要建立索引。 二是若表中的内容比较大,但是,这个表基本上不怎么查询的时候,则只需要在表上建立索引即可;而不需要在字段上建立索引。如现在在ERP系统中,有一张表是“AD_Table”。其存储的是这个数据库中相关表的信息。这张表只有在数据库设计的时候才会用到。故这张表中的记录虽然比较多,但是由于用户用的比较少,所以,一般没有必要为这张表建立列级别上的索引。而直接用表索引来代替。 三是在一些NULL字段上,要根据实际情况来判断是否要建立索引。如现在有一张人事档案的表格,其上面有两个字段,分别为“身份证号码”与“地区”。有时会为了某个原因,企业需要所有员工都在系统中登记他们的身份证号码,以方便他们办工资卡、社会保险等等。所以人事管理可能需要经常的查询系统,看看有没有没有身份证号码的员工信息。此时,就需要利用条件“IS NULL”来查询我们所需要的记录。故为了提高查询效率,若某个记录可能为空,并且经常需要以NULL为条件进行查询的时候,则最好给这个字段添加一个索引,并且最好建立位图索引。相反,若虽然可能会以NULL这个条件作为查询的限制语句,但是,用的不是很多的时候,则就没有必要为其建立索引。 建议三:多表连接查询的索引设计。 如现在有一个人事管理系统。人事经理想知道员工的社保缴纳情况。他需要知道员工的姓名、职务、户籍性质(农民户口跟居民户口费用不一样)、缴纳的情况等等。但是,这些信息包含在不同的表中。因为为了提高数据库的性能,在表中存储的可能只是某些序号,而不是具体的内容。如在社保表中,存储的是员工对应的编号,而不是员工的名字。所以,要得到这份报表的话,就可能需要关联员工基本信息表、公司组织结构表等表格,才能够查询到用户所需要的内容。 为此,就需要利用Join语句,把这些表格关联起来。为了提高数据库的查询效率,这些用来关联的字段,最好能够建立索引。这可以显著的提高查询的速度。 建议四:在表的更新速度与查询速度之间寻求一个平衡点。 众所周知,索引本身并不影响数据库的使用,其主要是为了提高数据库的查询效率。但是,由于当数据库的表中的数据更新的时候,包括记录的增加、删除、更改等等,都会对虽有的索引进行更新。 很明显,索引虽然可以提高查询速度。但是,也会对一些表的更新操作产生不良的影响。当在表中建立的索引越多,这个不利影响也会越大。故数据库管理员在设置索引的时候,还需要注意,在这两个之间需要一个均衡点。 按照一般的理论来说,当某个表多数用来查询、更新相对来说比较上的话,则要多多采用索引。相反,当某个表记录更新居主导,查询相对来说比较少的话,则不要建立太多的索引,避免对更新的速度差生不利影响。

更多文章:
another time(another time和other time的区别)
2026年10月11日 05:00









