Oracle 深入学习 Part12: Managing Indexes (管理索引)

news2025/1/17 17:25:37

索引的分类

逻辑分类:

  • 单列和多列:

    • 单列索引(single column):对单列数据建立索引。

    • 复合索引(concatenated):对多列数据建立索引。

  • 唯一性:

    • 唯一性(unique):建立的key值唯一。

    • 非唯一性(nonumique):不唯一。

  • (function-based):在列上应用函数或表达式创建的索引。

  • (domain):用于用户定义的数据类型,通常需要自定义操作符或索引逻辑。

物理分类:

  • 分区:

    • 分区(partitioned):对大表分区存储,并为每个分区分别创建索引。

    • 不分区(nonpartitioned):

  • B树(B-tree):最常用的索引类型,基于平衡 B-树结构存储,适合高基数(列中值较多)的数据。

  • 位图索引(Bitmap):使用位图存储数据,适合低基数(列中值较少)的数据。

索引的结构

索引本身在oracle操作中不被直接引用。

索引本身是排序的,查找数据时先查找根节点,找到大致范围,再查询对应分支节点,再查询子节点找到rowid,确定数据的具体位置。

在底层的叶子节点间,组成了双向链表。

B-tree Index(B树索引)

B树是平衡树,root为根节点,branch为分支节点,leaf为叶子节点,每个节点相当于一个

所有index entry都存储在叶子节点中,每一个index entry对应着一条记录。

Key column length:key的长度

Key column value:key的值

ROWID:唯一值,相当于指针

Bitmap Index(位图索引)

适用条件:

        当某列取值只有固定的几个值时

每个叶子节点存储信息的固定格式

        <key(j键值), start ROWID(起始ROWID) , end ROWID(终止ROEID) , bitmap(01字符串,0代表不是,1代表是)

优点:

        计算速度快。

B树 (B-tree)位图 (Bitmap)
适合高基数列适合低基数列
更新键相对便宜更新键列非常昂贵
对使用OR谓词的查询效率低下对使用OR谓词的查询效率高
适用于OLTP适用于数据仓库

创建索引

索引独立于表,有自己单独的存储位置

CREATE [UNIQUE] [BITMAP] INDEX index_name
ON table_name(column1 [ASC|DESC], column2 [ASC|DESC], ...)
[TABLESPACE tablespace_name]
[PCTFREE n]
[INITRANS n]
[MAXTRANS n]
[STORAGE];
  • UNIQUE

    • 用于创建唯一索引,确保列中的值是唯一的。

    • 适用于主键(PRIMARY KEY)或唯一约束(UNIQUE CONSTRAINT)。

  • BITMAP

    • 指定创建位图索引,仅在支持位图索引的数据库(如 Oracle)中可用。

    • 适合低基数列。

  • index_name

    • 索引的名称,必须在同一模式下唯一。

    • 通常使用命名规则,如 表名_列名_idx

  • table_name

    • 表的名称。

  • column1, column2

    • 指定索引列,可以单列或多列。

    • 每列可以指定 ASC(升序)或 DESC(降序),默认是升序。

  • TABLESPACE tablespace_name

    • 指定索引存储的表空间(仅在 Oracle 中需要)。

  • PCTFREE n
    • 定义索引块中的可用空间百分比。

      • 值范围为 099,默认是 10(表示索引块预留 10% 空间用于更新)。

  • INITRANS n

    • 定义索引块中初始分配的事务槽数量。

      • n 的默认值通常是 2。

  • MAXTRANS n
    • 定义索引块中允许的最大事务数

      • 该值限制事务槽的最大数量。

  • [STORAGE]

    • 指定索引的存储参数。

      • 控制索引的物理存储特性,包括初始大小、增长方式等。

    • 常见参数:

      • INITIAL:分配的初始存储空间。

      • NEXT:每次扩展的存储空间。

      • PCTINCREASE:每次扩展时的增长百分比。

      • MINEXTENTSMAXEXTENTS:指定最小和最大扩展数量。

重构索引

ALTER INDEX index_name STORAGE (
    INITIAL size
    NEXT size
    PCTINCREASE percentage
    MINEXTENTS n
    MAXEXTENTS n
);

重新构建索引(REBUILD)

普通重建

ALTER INDEX index_name REBUILD [TABLESPACE tablespace_name];
  • 在普通重建过程中,索引及其对应的表会被完全锁定,不能进行任何 DML 操作(如 INSERTUPDATEDELETE)。

在线重建

ALTER INDEX index_name REBUILD [TABLESPACE tablespace_name] ONLINE;

在重建过程中,允许用户对表进行查询和数据修改(DML),仅在索引重建的开始和结束阶段有短暂锁定。

普通重构的过程
  • 1.锁定表。

  • 2.通过读取现有索引的内容创建一个新的临时索引。

  • 3.删除原始索引。

  • 4.重命名临时索引,使其看起来像原始索引。

  • 5.移除表锁。

在线重构的过程
  • 1.锁定表。

  • 2.创建一个新的、临时的空索引,并创建一个 IOT(索引组织表)来存储正在进行的 DML 操作。

  • 3.释放表锁。

  • 4.通过读取现有索引的内容填充临时索引。

  • 5.将 IOT 的内容合并到新索引中。

  • 6.锁定表。

  • 7.进行 IOT 的最终合并并删除原始索引。

  • 8.重命名临时索引,使其看起来像原始索引。

  • 9.移除表锁。

Coalescing Indexes(合并索引)

Coalescing Indexes(合并索引)是 Oracle 数据库中优化索引的一种方法,其目的是减少索引的碎片,优化空间利用,同时保持索引的可用性。

语法

ALTER INDEX index_name COALESCE;

合并索引 vs 重建索引

特性合并索引(Coalesce Index)重建索引(Rebuild Index)
影响可用性不影响(表和索引可用)可能锁定表(普通重建会锁定表)
操作范围仅合并叶块,无需重建整个索引重建整个索引
碎片清理减少碎片,但不清理整个索引清理整个索引
性能消耗较低较高
适用场景空间优化,尤其是分区索引索引整体性能优化或表空间调整

检查索引的有效性(Index Validity)

确保索引没有损坏并且能够正常工作。

ANALYZE INDEX index_name VALIDATE STRUCTURE;
  • 相关结果会存储在数据字典视图 INDEX_STATS 中。

执行完命令后,可以通过以下查询检查结果:

SELECT * FROM INDEX_STATS;

删除索引

DROP INDEX index_name;
  • 不会影响表数据:删除索引仅移除索引结构,表中的数据不会被删除。

  • 检查依赖性

    • 索引删除时,与之相关的唯一性约束或主键约束也会被删除(需谨慎)。

    • 如果索引是自动创建的(如主键或唯一性约束的隐式索引),应先删除约束,再删除索引。

  • 表锁定:删除索引可能导致表的短暂锁定。

识别未使用的索引(Identifying Unused Indexes)

dentifying Unused Indexes(识别未使用的索引)是数据库优化的重要步骤,可以帮助减少存储空间、降低维护成本并提升整体性能。

1.启用索引监控

ALTER INDEX index_name MONITORING USAGE;

2,运行一段时间

  • 保持监控开启,通常建议运行几天到几周,确保监控期间涵盖了所有典型的业务操作。

3.查看索引使用情况

查询 V$OBJECT_USAGE 视图检查索引是否被访问。

SELECT INDEX_NAME, TABLE_NAME, MONITORING, USED 
FROM V$OBJECT_USAGE 
WHERE INDEX_NAME = 'index_name';

4.停止索引监控 一旦完成监控,可以关闭监控功能。

ALTER INDEX index_name NOMONITORING USAGE;

相关视图

DBA_INDEXES:

提供数据库中所有索引的相关统计信息,包括索引的类型、状态、存储位置和其他重要属性。

常用字段
  • INDEX_NAME:索引名称。

  • TABLE_NAME:索引所关联的表名。

  • INDEX_TYPE:索引类型(如 NORMALBITMAPFUNCTION-BASED NORMAL)。

  • UNIQUENESS:是否唯一索引(UNIQUENONUNIQUE)。

  • STATUS:索引的状态(VALIDUNUSABLE)。

  • TABLESPACE_NAME:索引存储的表空间。

  • BLEVEL:索引的 B-树层级(越小性能越好)。

  • NUM_ROWS:索引所覆盖的表中行数。

DBA_IND_COLUMNS:

提供每个索引的列信息,用于详细描述索引的结构

常用字段
  • INDEX_NAME:索引名称。

  • TABLE_NAME:索引对应的表名。

  • COLUMN_NAME:索引使用的列名。

  • COLUMN_POSITION:列在索引中的位置(多列索引时列的顺序)。

  • DESCEND:列是否以降序存储(ASCDESC)。

X$OBJECT_USAGE:

X$OBJECT_USAGE 是 Oracle 的内部动态性能表,用于跟踪索引的使用情况(与 V$OBJECT_USAGE 密切相关)。

常用字段
  • INDEX_NAME:索引名称。

  • OBJECT_ID:对象 ID。

  • USED:索引是否被使用(YESNO)。

  • MONITORING:是否正在监控索引使用情况(YESNO)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2278097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络安全】FortiOS Authentication bypass in Node.js websocket module

文章目录 漏洞说明严重等级影响的产品和解决措施推荐阅读 漏洞说明 FortiOS存在一个使用替代路径或者信道进行身份验证绕过漏洞&#xff0c;可能允许未经身份验证的远程攻击者透过向Node.js WebSocket模块发送特别设计的请求&#xff0c;可能获得超级管理员权限。 Fortinet 官…

GMM高斯混合聚类算法(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GMM高斯混合聚类算法 matlab2023b语言&#xff0c;一键出图&#xff0c;直接运行 1.代码注释清晰&#xff0c;自行解读容易。 2…输出图例如图所示包括&#xff1a;聚类图(聚类结果图)&#xff0c;协方差矩阵类型…

Kutools for Excel 简体中文版 - 官方正版授权

Kutools for Excel 是一款超棒的 Excel 插件&#xff0c;就像给你的 Excel 加了个超能助手。它有 300 多种实用功能&#xff0c;现在还有 AI 帮忙&#xff0c;能把复杂的任务变简单&#xff0c;重复的事儿也能自动搞定&#xff0c;不管是新手还是老手都能用得顺手。有了它&…

计算机数据提取与固定

1.计算机数据的提取与固定 1.课程介绍 电子数据提取与固定、电子数据恢复、电子数据分析。 2.计算机数据提取与固定 数字化时代&#xff0c;计算机和电子设备承载海量素具&#xff0c;这些数据在各类案件调查、事故处理以及合规审计场景扮演关键角色。 3.操作系统定义 操…

VSCode 使用默认profile打开文件

VSCode 本身的定位就是文本编辑器&#xff0c;只是通过各种插件才实现了 IDE 的功能。 如果想要把 VSCode 当作 IDE 和文本编辑器同时使用&#xff0c;就需要注意 profile 切换的问题。 profile 是 VSCode 的一个功能&#xff0c;可以通过多首选项管理不同的环境&#xff0c;比…

Profibus DP转Modbus TCP协议转换网关模块功能详解

Profibus DP 和 Modbus TCP 是两种不同的工业现场总线协议&#xff0c;Profibus DP 常用于制造业自动化领域&#xff0c;而 Modbus TCP 则在工业自动化和楼宇自动化等领域广泛应用。实现 Profibus DP 转 Modbus TCP 功能&#xff0c;通常需要特定的网关设备&#xff0c;以下为你…

镭速大文件传输视频文件预览实现原理

镭速可以支持视频预览&#xff0c;在测试过程中需要大量不同格式的视频&#xff0c;如果直接去找各种格式的视频不太现实&#xff0c;所以就会用到一个视频格式转换的工具ffmpeg&#xff0c;本文将介绍ffmpeg的基本使用方法。FFmpeg 是一个免费开源的音视频处理工具&#xff0c…

keepalived双机热备(LVS+keepalived)实验笔记

目录 前提准备&#xff1a; keepalived1&#xff1a; keepalived2&#xff1a; web1&#xff1a; web2&#xff1a; keepalived介绍 功能特点 工作原理 应用场景 前提准备&#xff1a; 准备4台centos&#xff0c;其中两台为keepalived&#xff0c;两台为webkeepalive…

MySQL(高级特性篇) 02 章——MySQL的数据目录

一、MySQL8的主要目录结构 命令&#xff1a; find / -name mysql 安装好MySQL8之后&#xff0c;我们查看如下的目录结构 &#xff08;1&#xff09;数据库文件的存放路径 MySQL数据库文件的存放路径&#xff1a;/var/lib/mysql/MySQL服务器程序在启动时会到文件系统的某个目…

【C++篇】红黑树的实现

目录 前言&#xff1a; 一&#xff0c;红黑树的概念 1.1&#xff0c;红黑树的规则 1.2&#xff0c;红黑树的最长路径 1.3&#xff0c;红黑树的效率分析 二&#xff0c;红黑树的实现 2.1&#xff0c;红黑树的结构 2.2&#xff0c;红黑树的插入 2.2.1&#xff0c;大致过程…

UDP报文格式

UDP是传输层的一个重要协议&#xff0c;他的特性有面向数据报、无连接、不可靠传输、全双工。 下面是UDP报文格式&#xff1a; 1&#xff0c;报头 UDP的报头长度位8个字节&#xff0c;包含源端口、目的端口、长度和校验和&#xff0c;其中每个属性均为两个字节。报头格式为二…

解锁转型密码:不同方向的技能与素质修炼手册

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 解锁…

HTML中最基本的东西

本文内容的标签&#xff0c;将是看懂HTML的最基本之基本 &#xff0c;是跟您在写文章时候一样内容。一般想掌握极其容易&#xff0c;但是也要懂得如何使用&#xff0c;过目不忘&#xff0c;为手熟尔。才是我们学习的最终目的。其实边看边敲都行&#xff0c;或者是边看边复制粘贴…

NodeJS | 搭建本地/公网服务器 live-server 的使用与安装

目录 介绍 安装 live-server 安装方法 安装后的验证 环境变量问题 Node.js 环境变量未配置正确 全局安装的 live-server 路径未添加到环境变量 运行测试 默认访问主界面 访问文件 报错信息与解决 问题一&#xff1a;未知命令 问题二&#xff1a;拒绝脚本 公网配置…

【excel】VBA股票数据获取(搜狐股票)

文章目录 一、序二、excel 自动刷新股票数据三、付费获取 一、序 我其实不会 excel 的函数和 visual basic。因为都可以用matlab和python完成。 今天用了下VBA&#xff0c;还挺不错的。分享下。 上传写了个matlab获取股票数据的&#xff0c;是雅虎财经的。这次是搜狐股票的数…

Redis的过期策略、内存淘汰机制

Redis只能存5G数据&#xff0c;可是你写了10G&#xff0c;那会删5G的数据。怎么删的&#xff1f;还有&#xff0c;你的数据已经设置了过期时间&#xff0c;但是时间到了&#xff0c;为什么内存占用率还是比较高? 一、Redis的过期策略 Redis采用的是定期删除惰性删除策略。 1…

C语言结构体漫谈:从平凡中见不平凡

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文《1》 结构体的两种声明一、结构…

redis(2:数据结构)

1.String 2.key的层级格式 3.Hash 4.List 5.Set 6.SortedSet

OCP使用中的常见问题与解决方法

OCP的常见问题 页面卡顿&#xff1a; 遇到页面卡顿的问题时&#xff0c;首先需要区分是全局性的卡顿&#xff0c;即所有页面都出现延迟或响应缓慢&#xff0c;还是仅限于特定的监控页面。 监控数据看不到: 需要明确是全部数据都无法查看&#xff0c;还是仅限于特定集群的数…

第三十八章 Spring之假如让你来写MVC——适配器篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…