ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 索引的应用分析

索引的应用分析

原创 Linux操作系统 作者:dkyo 时间:2007-10-30 00:00:00 0 删除 编辑

索引是提高数据查询的最有效方法
索引的管理成本:
1.存储索引的磁盘空间
2.执行数据修改操作(insert、update、delete)产生的索引维护
3.在数据处理时会需额外的回退空间。
建索引之后,数据修改时间会延长。
索引按存储方法分类
B*树索引
B*树索引是最常用的索引,其存储结构类似书的索引结构,有分支和叶两种类型的存储数据块,分支相当于书的大目录,叶块相当于索引到的具体的书页。一般索引及唯一约束索引都使用B*树索引。

位图索引
位图索引储存主要用来节省空间,减少oracle对数据块的访问,它采用位图偏移方式来与表的行ID号对应,采用位图索引一般是重复值太多的表字段。位图索引在实际密集型OLTP(数据事务处理)中用得比较少,因为OLTP会对表进行大量的删除、修改、新建操作,oracle每次进行操作都回对要操作的数据块加锁,所以多人操作容易产生数据块锁等待甚至死锁现象。在OLAP(数据分析处理)中应用位图有优势,因为OLAP中大部分是对数据库德查询操作,而且一般采用数据仓库技术,所以大量数据采用位图索引节省空间比较明显。

索引按功能分类
唯一索引
唯一索引有两个作用,一个是数据约束,一个是数据索引,其中数据约束主要用来保证数据的完整性,唯一索引产生的索引记录中每一条记录都对应一个唯一的rowid

主关键字索引
主关键字索引产生的索引同唯一索引,只不过它是在数据库建立主关键字时系统自动建立的

一般索引
一般索引不产生数据约束作用,其功能主要是对字段建立索引表,

以提高数据查询速度。

索引按索引对象分类
单列索引(表的单个字段的索引)
多列索引(表多个字段的索引)
函数索引(对字段进行函数运算的索引)
建立函数索引的方法:
create index test on table_name(trunc(表列))

应用索引的扫描分类:
INDEX UNIQUE SCAN(按索引的唯一值扫描)
INDEX RANGE SCAN(按索引值范围扫描)
INDEX FAST FULL SCAN(按索引值快速全部扫描)

什么情况下应该建立索引
表的主关键字
自动建立唯一索引
表的字段唯一约束
oracle利用索引来保证数据的完整性
直接条件查询的字段
在sql中用于条件约束的字段
查询中与其它表关联的字段
字段常常建立了外键关系
查询中排序的字段
排序的字段如果通过索引去访问那将大大提高排序速度
查询中统计或分组统计的字段

什么情况下应不建或少建索引
表记录太少
如果一个表记录太少,采用索引去访问记录的话,那首先需访问索引表,再通过索引表访问数据表,一般索引表与数据表不在同一个数据块,这种情况下oracle至少要往返读取数据块两次。而不用索引的情况下

oracle会将所有的数据一次读出,处理速度显然会比用索引快。

经常插入、删除、修改的表
对一些经常处理的业务表应在查询允许的情况下尽量减少索引。

数据重复且分布平均的表字段
加入一个表有10万行记录,有一个字段A只有T和F两种值,且每个值的分布概率大约为50%,那么对这种表A字段建索引一般不会提高数据库的查询速度。

经常和主字段一块查询但主字段索引值比较多的表字段

如果一个表的记录达到100万以上的话,要对其中一个字段建索引可能要花很长的时间,甚至导致服务器数据库死机,因为在建索引的时候oracle要将索引字段所有的内容取出并进行全面排序,数据量大的话可能导致服务器排序内存不足而引用磁盘交换空间进行,这将严重影响服务器数据库德工作。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/302844/viewspace-85977/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 企业流程学习1
下一篇: excel学习
请登录后发表评论 登录
全部评论

注册时间:2008-01-03

  • 博文量
    109
  • 访问量
    218138