Oracle中索引的原理1

本文探讨Oracle中索引的原理,包括B-Tree和Bitmap索引的介绍及区别。B-Tree索引是Oracle默认类型,适用于值域广泛的列,而Bitmap索引适合值域较小的列。创建索引能提升查询速度,但可能影响写操作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:本文解决的问题

  • Oracle中使用Index一定会加快查找速度吗?
  • B+Tree和Bitmap索引的区别
  • 索引的原理

1 索引的基本概念

索引是一种数据库结构,能够就数据库中的某列提供快速查询,而不用检索整个表格。建立索引时,oracle会首先对全表进行搜索,然后把要建立索引的字段排序,并构建构建索引条目(包含字段值和该字段在原表中的地址值rowid),把索引条目存储到索引段中。

An index is a database structure that provides quick lookup of data in
a column or columns of a table.

说到底了,这是用空间来换时间,但是查找对于经常要搜索的字段,尤其对于table数据很多的情况下,有索引速度还是快很多。可以形象地把索引类比于百科全书的目录,虽然多了几页目录,但是查找起来不需要一页一页搜寻,速度还是快很多。

2 索引的分类

索引里面的元素是排序的,如果不止一列,那么第一列是主排序,然后再根据后面的列顺序依次排序。oracle中默认使用的是B-Tree索引。

2.1 B-Tree索引(ORACLE默认的)
2.11 B-Tree基本介绍

B-Tree是一种平衡树,数据存储在叶子节点上,检索节点上的数据所走的步数长度是一样的,数据结构见下图。
在这里插入图片描述

2.12 语法

create index <index_name> on <table_name> ( , , … );

2.13 例子

在这里插入图片描述

2.2 Bitmap索引
2.21 Bitmap基本介绍

Bitmap类index是存储在一个二维表中,行是rowid,列名称是属性的取值范围,表格中的数据是属性值。具体如下
在这里插入图片描述
Bitmap主要用于选定的列中,属性取值范围比较小的,如为性别(male,female),衣服尺寸(S,M,L)等,而且在读取比较多的系统中使用较多。

2.22 语法

CREATE BITMAP INDEX Index_Name ON Table_Name (Column_Name);

2.23 例子

在这里插入图片描述

2.3 二者区别

B-Tree索引适合属性值取值范围很大的,而bitmap索引适合于属性值取值范围小的。

3 使用索引注意事项

  • oracle创建主键时会自动在该列上创建索引
  • 经常进行连接查询的列应该创建索引
  • 使用create index时要将最常查询的列放在最前面
  • 在使用where和join的属性上建立索引
  • 在外键(foreign key)上建立索引

4 索引的缺点

  • 索引并不一定加快查询速度,尤其是对于比较小的表来说
  • 索引是用空间换时间来实现快速查询,因此也势必会拖慢insert、delete、update等操作,因为每次操作后索引也必须更新。

参考文献

https://dev.to/databasestar/a-guide-to-indexes-in-oracle
https://docs.oracle.com/cd/E11882_01/server.112/e40540/indexiot.htm#CNCPT811
https://www.cnblogs.com/wishyouhappy/p/3681771.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值