oracle:索引(B树索引,位图索引,分区索引,主键索引,唯一索引,联合索引/组合索引,函数索引)

索引通过存储列的排序值来加快对表中数据的访问速度,帮助数据库系统快速定位到所需数据,避免全表扫描

B树索引(B-Tree Index)

B树索引是一种平衡树结构,适合处理范围查询和精确查找。它的设计目标是保持数据有序,并支持高效的插入、删除和查找操作。是 Oracle 数据库中一种最常见的索引类型, 索引没有指定索引类型时默认是B树索引

语法 : 根据表中的某个字段创建索引

索引名命名规范: idx_表名_字段名

(不强制,只是相对规范,其他起名方式也可以)

位图索引(Bitmap Index)

主要用于处理低基数列(即列中唯一值较少的列,如性别、状态等)。位图索引通过使用位图(bitmap)来表示数据的存在与否,适合在数据仓库或决策支持系统(DSS)中使用,尤其是在需要处理大量静态数据和复杂查询的场景中。

语法

分区索引(Partitioned Index)

是与分区表(Partitioned Table)相关联的索引。分区表是将大表数据按某种规则(如范围、列表、哈希等)分成多个较小的分区(Partition),而分区索引则是为这些分区创建的索引。分区索引可以显著提高大表的查询性能,尤其是在数据量非常大的情况下。

分类

区别: 当表分区发生变化(如添加、删除、合并分区)时,本地分区索引会自动同步, 全局分区索引可能需要手动维护

语法

以上语法没有指定索引实现方式, 默认是B树索引

主键索引和唯一索引

主键索引和唯一索引通常都是使用B树索引来实现的, 通常不将主键索引和唯一索引指定为位图索引/哈希索引。

共同点:

1.唯一索引和主键索引都是用来保证数据的唯一性的;

2.都可以在建表时定义

区别:

1.主键索引不能包含NULL值, 唯一索引可以有NULL值且可以出现多次(因为NULL不等于任何值,包括它自己)。

2.一个表只能有一个主键索引,但可以有多个唯一索引

主键索引的语法

主键索引字段是单个时是单一主键索引, 字段有2个或以上时是复合主键索引

唯一索引的语法

联合索引/组合索引

指在多个列上创建的索引。它适用于查询条件中同时涉及多个列的场景, 默认属于B树索引,不支持直接将联合索引创建为哈希索引

索引(a , b , c) 有3个字段,相当于建了3个索引, 即索引(a) , 索引(a , b) , 索引(a, b , c)

联合索引的顺序影响查询效率,应根据查询频率和选择性设计索引。高选择性的列应放在前面

最左原则:

联合索引按从左到右的顺序匹配,查询条件必须包含最左侧的列,否则索引可能失效。例如,索引为 (A, B, C),查询条件应包含 A,否则索引可能无法使用

如果联合索引是 (A, B, C),而查询条件是 AC(即缺少中间的 B),联合索引部分有效

函数索引

基于表达式或函数创建的索引。它适用于查询条件中包含函数或表达式的场景, 常用于优化复杂的计算列查询以及大小写不敏感的查询, 默认属于B树索引, 不支持将函数索引直接指定为哈希索引

指定位图索引的语法

查看索引

查看索引信息

USER_INDEXES 视图包含了当前用户拥有的所有索引的信息

ALL_INDEXES 视图包含了当前用户有权限访问的所有索引的信息

DBA_INDEXES 视图包含了数据库中所有索引的信息。你需要有 DBA 权限才能访问这个视图。

查看索引包含的列

查看索引的储存信息

USER_SEGMENTS是一个系统视图, 用于描述当前用户所拥有的对象的段(Segment)的存储分配情况, 段是 Oracle 数据库中分配存储空间的逻辑单位,用于存储表、索引、分区、簇等对象的数据

索引选择:如果聚簇因子较高,CBO 可能会认为全表扫描的成本更低,从而选择全表扫描而不是索引扫描

查看索引的分区信息(如果索引是分区索引)

获取索引的DDL

通过对象面板查看索引

查看索引 : Tables>>表名>>查看

查看索引DDL: Tables>>表名>>DBMS_元数据(D)>>DDL

删除索引

授权sql

如果尝试删除一个不存在的索引,数据库会抛出一个错误

验证索引是否已删除

删除与约束相关的索引

如果索引是某个约束(如主键或唯一约束)的一部分,Oracle 会自动为该约束创建索引。这种情况下,不能直接删除索引,需要删除约束, 删除约束= 删除相应的索引

复制代码
ALTER TABLE employee
DROP CONSTRAINT 约束名;

删除分区索引

直接使用 DROP INDEX 删除整个索引,或者删除特定的分区

复制代码
ALTER INDEX 分区索引名称
DROP PARTITION 分区名;
相关推荐
杨超越luckly4 小时前
HTML应用指南:利用GET请求获取中国500强企业名单,揭秘企业增长、分化与转型的新常态
前端·数据库·html·可视化·中国500强
Elastic 中国社区官方博客4 小时前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索
仍然.4 小时前
MYSQL--- 聚合查询,分组查询和联合查询
数据库
一 乐4 小时前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
啦啦啦_99995 小时前
Redis-0-业务逻辑
数据库·redis·缓存
自不量力的A同学5 小时前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
Exquisite.5 小时前
Mysql
数据库·mysql
全栈前端老曹6 小时前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集
R1nG8636 小时前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann
阿钱真强道6 小时前
12 JetLinks MQTT直连设备事件上报实战(继电器场景)
linux·服务器·网络·数据库·网络协议