oracle 性能优化--索引总结

本文详细介绍了Oracle数据库中的索引原理、类型、使用目的和最佳实践。通过理解索引的数据结构,如B*树和位图索引,以及如何在不同场景下选择合适的索引类型,如非唯一索引、唯一索引和位图索引,可以显著提升查询速度和减少I/O操作。创建和管理索引的准则,包括何时创建、如何选择列、限制索引数量,以及如何重建和删除索引,都是性能优化的重要环节。此外,文章还探讨了SQL优化器的工作方式,如何调整SQL语句以提高查询效率,以及如何避免不必要的排序和利用索引。
摘要由CSDN通过智能技术生成

索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据;

    Oracle存储索引的数据结构是B*树,位图索引也是如此,只不过是叶子节点不同B*数索引;

    索引由根节点、分支节点和叶子节点组成,上级索引块包含下级索引块的索引数据,叶节点包含索引数据和确定行实际位置的rowid。

使用索引的目的:

加快查询速度

减少I/O操作

消除磁盘排序

 

何时使用索引:

查询返回的记录数

排序表<40%

非排序表 <7%

表的碎片较多(频繁增加、删除)

 

索引的种类

非唯一索引(最常用)

唯一索引

位图索引

局部有前缀分区索引

局部无前缀分区索引

全局有前缀分区索引

散列分区索引

基于函数的索引

 

管理索引的准则

 

在表中插入数据后创建索引

 

。在用SQL*Loader或import工具插入或装载数据后,建立索引比较有效;

 

索引正确的表和列

 

。经常检索排序大表中40%或非排序表7%的行,建议建索引;

。为了改善多表关联,索引列用于联结;

。列中的值相对比较唯一;

。取值范围(大:B*树索引,小:位图索引);

。Date型列一般适合基于函数的索引;

。列中有许多空值,不适合建立索引

 

为性能而安排索引列

 

。经常一起使用多个字段检索记录,组合索引比单索引更有效;

。把最常用的列放在最前面,例:dx_groupid_serv_id(groupid,serv_id),在where条件中使用groupid或groupid,serv_id,查询将使用索引,若仅用到serv_id字段,则索引无效;

。合并/拆分不必要的索引。

 

限制每个表索引的数量

 

。一个表可以有几百个索引(你会这样做吗?),但是对于频繁插入和更新表,索引越多系统CPU,I/O负担就越重;

。建议每张表不超过5个索引。

 

删除不再需要的索引

 

。索引无效,集中表现在该使用基于函数的索引或位图索引,而使用了B*树索引;

。应用中的查询不使用索引;

。重建索引之前必须先删除索引,若用alter index … rebuild重建索引,则不必删除索引。

 

索引数据块空间使用

 

。创建索引时指定表空间,特别是在建立主键时,应明确指定表空间;

。合理设定pctfress,注意:不能给索引指定pctused;

。估计索引的大小和合理地设置存储参数,默认为表空间大小,或initialnext设置成一样大。

 

考虑并行创建索引

 

。对大表可以采用并行创建索引,在并行创建索引时,存储参数被每个查询服务器进程分别使用,例如:initial1M,并行度为8,则创建索引期间至少要消耗8M空间;

 

考虑用nologging创建索引

 

。对大表创建索引可以使用nologging来减少重做日志;

。节省重做日志文件的空间;

。缩短创建索引的时间;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值