返回顶部
首页 > 资讯 > 精选 >oracle有多个索引吗
  • 703
分享到

oracle有多个索引吗

2023-07-10 17:07:36 703人浏览 薄情痞子
摘要

oracle有多个索引。分别是:1、“B*”数索引,能根据键提供一行或一个行集的快速访问;2、位图索引,适用于高度重复而且通常只读的数据;3、基于函数的索引,将一个函数计算得到的结果存储在行的列中;4、应用域索引,是自己构建和存储的索引;5

oracle有多个索引。分别是:1、“B*”数索引,能根据键提供一行或一个行集的快速访问;2、位图索引,适用于高度重复而且通常只读的数据;3、基于函数的索引,将一个函数计算得到的结果存储在行的列中;4、应用域索引,是自己构建和存储的索引;5、HASH索引,使用该索引必须要使用HASH群集;6、分区索引,把一个索引分成多个片断。

oracle有多个索引吗

教程操作环境:windows10系统、Oracle 19c版本、Dell G3电脑。

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* 树中,通常索引条目和行之间存在一种一对一的关系:一个 索引条目就指向一行。而对于位图索引,一个索引条目则使用一个位图同时指向多行。位图索引适用于高度重复而且通常只读的数据(高度重复是指相对于表中的总行数,数据只有很少的几个不同值)。考虑在一 个有 100 万行的表中,每个列只有 3 个可取值: Y 、 N 和 NULL 。举例来说,如果你需要频繁地统计多少行有值Y ,这就很适合建立位图索引。不过并不是说如果这个表中某一列有 11.000 个不同的值就不能建立位图索引,这一列当然也可以建立 位图索引。在一个 OLTP 数据库中,由于存在并发性相关的问题,所以不能考虑使用位图索引(后面我们就会讨论这一点)。注意,位图索引要求使用 Oracle 企业版或个人版。

位图联结索引( bitmap join index ):这为索引结构(而不是表)中的数据提供了一种逆规范化的 方法。例如,请考虑简单的 EMP 和 DEPT 表。有人可能会问这样一个问题: “ 多少人在位于波士顿的部门工作 ?“ EMP 有一个指向 DEPT 的外键,要想统计 LOC 值为 Boston 的部门中的员工人数,通常必须完成表联结,将 LOC 列联结至 EMP 记录来回答这个问题。通过使用位图联结索引,则可以在 EMP 表上对 LOC 列建立索引 。

3、 基于函数的索引( function-based index )

这些就是 B* 树索引或位图索引,它将一个函数计算得到的结果存储在行的列中,而不是存储列数据本身。可以把基于函数的索引看作一个虚拟列(或派生列)上的索引,换句话说,这个列并不物理存储在表中。基于函数的索引可以用于加快形如 SELECT * FROM T W HERE FUNCTION(DATABASE_COLUMN) = SAME_VALUE 这样的查询,因为值 FUNCTION(DATABASE_COLUMN) 已经提前计算并存储在索引中。

4、 应用域索引( application domain index )

应用域索引是你自己构建和存储的索引,可能存储在Oracle 中,也可能在 Oracle 之外。你要告诉优化器索引的选择性如何,以及执行的开销有多大,优化器则会根据你提供的信息来决定是否使用你的索引。 Oracle 文本索引就是应用域索引的一个例子;你也可 以使用构建 Oracle 文本索引所用的工具来建立自己的索引。需要指出,这里创建的 “ 索引 “ 不需要使用传统的索引结构。例如, Oracle 文本索引就使用了一组表来实现其索引概念。

5、HASH索引

使用HASH索引必须要使用HASH群集。建立一个群集或HASH群集的同时,也就定义了一个群集键。这个键告诉Oracle如何在群集上存储表。在存储数据时,所有与这个群集键相关的行都被存储在一个数据库块上。若数据都存储在同一个数据库块上,并且使用了HASH索引,Oracle就可以通过执行一个HASH函数和I/O来访问数据——而通过适用一个二元高度为4的B-树索引来访问数据,则需要在检索数据时使用4个I/O。

技巧:HASH索引在有限制条件(需要指定一个确定的值而不是一个值范围)的情况下非常有用。

6、分区索引

分区索引就是简单地把一个索引分成多个片断,这样可以访问更小的片断,并且可以把这些片断分别存放在不同的硬盘上(避免I/O问题)。B-数索引和位图索引都可以被分区,HASH索引不可以被分区。

有两种类型的分区索引:本地分区索引和全局分区索引。每个类型都有两个子类型,有前缀索引和无前缀索引。如果使用了位图索引就必须是本地索引。

把索引分区最主要的原因是可以减少所需读取的索引的大小,另外把分区放在不同的表空间中可以提高分区的可用性和可靠性。

以上就是oracle有多个索引吗的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: oracle有多个索引吗

本文链接: https://lsjlt.com/news/359478.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • oracle有多个索引吗
    oracle有多个索引。分别是:1、“B*”数索引,能根据键提供一行或一个行集的快速访问;2、位图索引,适用于高度重复而且通常只读的数据;3、基于函数的索引,将一个函数计算得到的结果存储在行的列中;4、应用域索引,是自己构建和存储的索引;5...
    99+
    2023-07-10
  • oracle外键索引吗
    oracle外键索引,为了确定是否需要为外键创建索引,需要考虑以下几个因素:1、外键列的查询和连接操作的使用频率,如果外键列上经常执行这样的操作,那么为外键列创建索引是很有必要的,以提高这些操作的性能;2、外键列的基数,基数是指外键列中不同...
    99+
    2023-08-03
  • oracle组合索引和单个索引有什么区别
    组合索引是指在表中创建多个列的索引,而单个索引是指只针对一个列创建索引。 区别如下: 组合索引可以通过同时查询多个列来提高查询效率...
    99+
    2024-04-09
    oracle
  • oracle有哪些索引
    Oracle数据库中常用的索引类型包括:1. B树索引(B-Tree Index):最常见的索引类型,用于快速查找数据。2. 唯一索...
    99+
    2023-08-25
    oracle
  • 索引到底有多重要?ASP帮得上忙吗?
    索引到底有多重要?ASP帮得上忙吗? 在当今数据爆炸的时代,数据管理是非常关键的。索引是一种数据结构,它可以大幅度提高数据库的查询效率。当数据量越来越大,查询效率低下会对系统性能产生极大的影响。因此,索引对于数据库的性能优化至关重要。那么,...
    99+
    2023-07-01
    索引 重定向 numpy
  • MySQL中的B-Tree引索与Hash引索有区别吗
    MySQL中的B-Tree引索与Hash引索有区别吗?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。MySQL中B-Tree引索...
    99+
    2024-04-02
  • php里只有索引数组吗
    这篇文章主要介绍了php里只有索引数组吗的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php里只有索引数组吗文章都会有所收获,下面我们一起来看看吧。php里面不只有索引数组。PHP中不但支持以数字为键名的索引数...
    99+
    2023-07-02
  • oracle索引类型有哪些
    oracle索引类型有:1、B-Tree索引;2、位图索引;3、函数索引;4、哈希索引;5、反向键索引;6、局部索引;7、全局索引;8、域索引;9、位图连接索引;10、复合索引。详细介绍:1、B-Tree索引,是一种自平衡的、可以高效地支持...
    99+
    2023-11-16
    oracle 索引
  • 索引多维 numpy 数组中的多个元素
    问题内容 我想使用另一个索引数组提取给定多维 numpy 数组的元素。但是它的行为并不符合我的预期。下面是一个简单的例子: import numpy as np a = np.ran...
    99+
    2024-02-22
  • mysql多条件查询会使用索引吗
    mysql多条件查询会使用索引,取决因素有:1、索引的选择性,指索引中具有唯一或较小重复值的比例;2、索引的覆盖度,指索引中包含了查询所需的所有列,从而避免了对实际数据行的访问,提高查询性能;3、查询的顺序和条件结合,根据查询的具体情况进行...
    99+
    2023-07-25
  • ORACLE索引知识点有哪些
    这篇文章主要讲解了“ORACLE索引知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ORACLE索引知识点有哪些”吧!总结一下索引失效的原因:单独...
    99+
    2024-04-02
  • oracle怎么查询所有索引
    要查询Oracle中的所有索引,可以使用以下方法之一:方法一:使用SYSTEM表登录到Oracle数据库中的SYSTEM账号,然后执...
    99+
    2023-08-22
    oracle
  • oracle如何查询所有索引
    您可以使用如下SQL语句查询所有索引:```sqlSELECT DISTINCT INDEX_NAMEFROM ALL_IN...
    99+
    2023-08-23
    oracle
  • oracle中的索引有哪几种
    oracle 支持的索引类型包括:b-tree 索引:用于快速等值、范围和前缀查询hash 索引:用于极快速的等值查询位图索引:用于查询布尔字段函数索引:用于查询函数或表达式产生的列空间...
    99+
    2024-05-08
    oracle
  • mysql添加多个btree索引的方法
    小编给大家分享一下mysql添加多个btree索引的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!目前大部分数据库系统及文件系统都采用B-Tree或其变种B+Tree作为索引结构。1、B+...
    99+
    2024-04-02
  • 怎么创建一个pandas多层索引
    这篇文章将为大家详细讲解有关怎么创建一个pandas多层索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。多层索引的创建普通-多个index创建在创建数据的时候加入一个index列表,这个i...
    99+
    2023-06-07
  • oracle如何看sql有没有走索引
    在Oracle中,可以通过以下几种方式来查看SQL是否使用了索引:1. 使用SQL Trace:通过启用SQL Trace,可以跟踪...
    99+
    2023-09-13
    oracle sql
  • oracle中断索引创建会影响dml吗
    oracle中断索引创建会影响dml吗? 在 Oracle 数据库中,中断索引创建不会影响数据操作语言 (DML) 语句的执行。 原因: Oracle 在创建索引时使用后台进程,不会阻...
    99+
    2024-05-09
    oracle
  • oracle如何查询某个表的索引
    要查询某个表的索引,可以使用以下SQL语句:```sqlSELECT *FROM USER_INDEXESWHERE...
    99+
    2023-08-23
    oracle
  • mysql多个联合索引的案例分析
    小编给大家分享一下mysql多个联合索引的案例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySQL中索引规则:1、需要加...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作