Java软件开发基础知识梳理之(1)------Oracle索引

一、引起索引失效的情况
1 查询语句没中没使用where设定查询条件或查询条件中使用的列没有建立索引
2  where 条件中对索引列使用了"<>"(不等号)作为比较运算符
3  where条件中仅单独使用">"(大于号)或"<"(小于号)作为比较运算符
4 查询的数量是大表的大部分,应该是30%以上
5 索引本身失效
6 查询条件使用函数在索引列上

7   在查询条件中比较不匹配的数据类型

二、Oracle索引分类

1  B树索引(最常用,默认值,以Balanced树来存储索引);
2  位图索引(一个索引条目则使用一个位图同时指向多行。位图索引适用于高度重复而且通常只读的数据列);
3  基于函数的索引--它将一个函数计算得到的结果存储在行的列中,而不是存储列数据本身。可以把基于函数的索引看作一个虚拟列(或派生列)上的索引,换句话说,这个列并不物理存储在表中。基于函数的索引可以用于加快形如 SELECT * FROM T W HERE FUNCTION(DATABASE_COLUMN) = SAME_VALUE 这样的查询,因为值 FUNCTION(DATABASE_COLUMN) 已经提前计算并存储在索引中
4  应用域索引(应用域索引是你自己构建和存储的索引,可能存储在Oracle 中,也可能在 Oracle 之外。你要告诉优化器索引的选择性如何,以及执行的开销有多大,优化器则会根据你提供的信息来决定是否使用你的索引)

三、索引的建立、修改、’删除、临时禁用、重新启用

1 创建索引
   create index index_name on table_name(colname_1, colname_2)
2  修改索引
   alter index index_name rebuild
3  删除索引
   drop index index_name
4  临时禁用索引
   alter index index_name unusable
5  重新启用被禁用的索引
   alter index index_name rebuild

四、索引的优缺点分析

优点:
1 大大提高数据检索效率(创建索引的主要原因)
2 加速表与表之间的关联,特别是在实现数据的参照完整性方面特别有意义
3 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间
4 通过使用索引,可以在查询的过程中,使用优化器,提高系统的性能

5 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
缺点:
1 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
2 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大
3 当对表中的数据进行增、删和修操作时,索引也要动态的维护,降低了数据的维护速度

五、索引列选择策略

建议选择:
1 经常需要放入where中做为查询条件的列应该建立索引,加快查询速度
2 为主键列建立索引,强制该列的唯一性和组织表中数据的排列结构
3 经常做为与其它表进行连接的列,建立索引可以加快连接速度
4 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的
5 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间
不适合建立索引的列
1 很少做为where条件中的列
2 对于那些只有很少数据值的列也不应该增加索引。由于这些列的取值很少,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度
3 对于那些定义为blob数据类型的列不应该增加索引
4 当修改性能远远大于检索性能时,不应该创建索引

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值