oracle数据库中的索引

索引的概念

数据库中的索引就类似于一本书的目录,如果你想查看的某个特定的内容就在目录中找到相关的内容,然后进到指定的页数就可以查找到想要找的内容。

为什么使用索引?

在数据量很大的情况下我们去查找某个指定的数据会很慢,如果电脑性能不够好可能会花很久的时间,这样有很多时间就会被浪费掉。现在我们在一些特定的字段上创建了索引,然后在查询的时候,就是直接通过索引查找对应的内容,然后再从这些数据中查出想要的数据,这样就避免了全表扫描查找,会节省很多时间。

索引类型介绍

逻辑上:
Single column:单行索引
Concatenated:多行索引
Unique:唯一索引
NoUnique:非唯一索引
Function-based:函数索引
Domain:域索引
物理上:
Partitioned:分区索引
NonPartitioned:非分区索引
B-tree:B树
Normal:正常型B树
Rever Key:反转型B树
Bitmap:位图索引

索引结构

1.B树索引
一般建立在一列或者多列上,这是使用最多的索引。
这种索引结构是在数据插入和删除的情况下仍能保持其执行效率的。

2.位图(bitmap)索引
一般在一个表中数据量很大,但是要查询的那个字段的值种类很少,(例如一个表有几百万条数据,但是这个字段中只有0,1两种值),这个时候一般用位图索引会比较方便。

索引创建语句

创建索引语法:
CREATE [UNIQUE] | [BITMAP] INDEX index_name
–unique表示唯一索引
ON table_name([column1 [ASC|DESC],column2
–bitmap,创建位图索引
[ASC|DESC],…] | [express])[TABLESPACE tablespace_name][PCTFREE n1]
–指定索引在数据块中空闲空间
[STORAGE (INITIAL n2)][NOLOGGING]
–表示创建和重建索引时允许对表做DML操作,默认情况下不应该使用
[NOLINE][NOSORT];
–表示创建索引时不进行排序,默认不适用,如果数据已经是按照该索引顺序排列的可以使用

1.创建唯一索引
create unique index index_name on table_name(字段名) nologging parallel 20;
2.创建位图索引
create bitmap index index_name on table_name(字段名) nologging parallel 20;

注意

1. 小表不建议使用索引。
2. 如果有两个或者以上的索引,其中有一个是唯一索引,其他是非唯一的,那么这种情况下在oracle数据库中使用时将会使用唯一索引,非唯一索引会被忽略。
3. 如果是组合索引,至少要包含组合索引的第一列,也就是索引建立在多个列上,只有第一个列被where子句引用时,优化器才会使用该索引。
4. 对于基数大的列适合用B树索引,对于基数少的列适合用位图索引。
5. 如果列中有很多空值,但经常查询该列上的非空值时应该建立索引。
6. 在create index的时候,最常查询的列放在前面。
7. 在大表中经常查询的列要创建索引。
8. 如果列是long(可变长字符串数据,最长2g)和long raw(可变长二进制数据,最长2g)不能创建索引。
9. 不能无限制创建索引,如果索引创建过多也会占用很多的物理空间,当对表中的数据进行增删改的时候,索引也太动态维护,那么如果过多的索引就会降低数据的维护速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值