我的编程空间,编程开发者的网络收藏夹
学习永远不晚

oracle 性能优化

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

oracle  性能优化

索引的说明

索引是与表相关的一个可选结构,在逻辑上和物理上都独立于表的数据,索引能优化查询,不能优化DML操作,Oracle自动维护索引,频繁的DML操作反而会引起大量的索引维护。

通常,为检索表数据,数据库以交替方式先读取索引块,然后读取相应的表块。

1 大表,返回的行数<5%

2 经常使用where子句查询的列

3 离散度高的列

4 更新键值代价低

5 逻辑AND、OR效率高

6 查看索引在建在那表、列:

   select * from user_indexes;

   select * from user_ind_columns;

oracle  索引结构:

索引结构

oracle索引分为两大类结构:

B树索引结构<balance>

类似于字典查询,最后到leaf block ,存的是数据rowid和数据项

oracle  性能优化

1.叶块之间使用双向链连接,为了可以范围查询。

2.删除表行时,索引叶块也会更新,但只是逻辑更改,并不做物理的删除叶块。

3.索引叶块不保存表行键值null的信息。

位图索引结构<bitmap>

在oracle中是根据rowid来定位记录的,因此,我们需要引入start rowid和end rowid,通过start rowid ,end rowid 和二进制位的偏移,我们就可以非常快速的计算出二进制位所代表的表记录rowid。位图索引的最终逻辑结构如下图:

oracle  性能优化

我们称每一单元的<key ,startrowid,end rowid,bitmap>为一个位图片段。当我们修改某一行数据的时候,我们需要锁定该行列值所对应的位图片段,如果我们进行的是更新操作,同时还会锁定更新后新值所在的位图片段。例如我们将列值从01修改为03,就需要同时锁定01和03位图片段,此时如果有其他用户需要修改与01或者03关联的表记录上的索引字段,就会被阻塞,因此位图索引不适合并发环境,在并发环境下可能会造成大量事务的阻塞。

建立索引的方式:

1.唯一索引:键值不重复

create unique index doctor_index on t_doctor(empno)

drop index doctor_index

2.一般索引:键值可重复

create index doctor_index on t_doctor(empno)

drop index doctor_index

3.复合索引:绑定了多个列

create index doctor_index on t_doctor(empno,job)

drop index doctor_index

4.反向索引:为避免平衡树索引热块,如t_doctor表中empno开头都是“7”,这样构建索引树的时候,很可能会把所有数据分配到一个块里,使用反向索引,避免此类问题,使索引树分布均匀

create index doctor_index on t_doctor(empno) reverse

drop index doctor_index

5.函数索引:查询时必须用到这个函数,才会使用到

create index func_index on t_doctor(lower(empno))

--select * from t_doctor where lower(empno) = 'lina'

drop index func_index 

6.压缩索引:不常用

create index doctor_index on t_doctor(empno) compress

drop index doctor_index

7.升序降序索引:

create index doctor_index on t_doctor(empno desc, job asc)

drop index doctor_index

索引碎片问题

由于对基表做DML操作, 导致索引表块的自动更改操作,尤其是基表的delete操作会引起index表的index_entries的逻辑删除,注意只有当一个索引块中的全部index_entry都被删除了,才会把这个索引块删除,索引对基表的delete、insert操作都会产生索引碎片问题。

在Oracle文档里并没有清晰的给出索引碎片的量化标准,Oracle建议通过Segment Advisor(段顾问)解决表和索引的碎片问题,如果你想自行解决,可以通过查看index_stats视图,当以下三种情形之一发生时,说明积累的碎片应该整理了(仅供参考)。

  查看执行计划:set autotrace traceonly explain;

analyze index ind_1 validate structure;

select name,HEIGHT,PCT_USED,DEL_LF_ROWS/LF_ROWS from index_stats;

1.HEIGHT >=4   

2 PCT_USED< 50%   

3 DEL_LF_ROWS/LF_ROWS>0.2

alter index ind_1 rebuild [online] [tablespace name];


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

oracle 性能优化

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

oracle基础~linux整体性能优化

包括三方面1 sysctl.conf//扩大文件句柄数fs.aio-max-nr = 1048576fs.file-max = 6815744// 扩大共享内存段 影响SGAkernel.shmmax = 4294967295 共享内存段的最大字节尺寸(以字节

	oracle基础~linux整体性能优化
2019-01-08

如何优化Oracle数据库的性能

要优化Oracle数据库的性能,可以采取以下措施:使用合适的硬件配置:确保服务器硬件配置足够强大,包括CPU、内存和存储等组件的性能要满足数据库的需求。优化SQL语句:对频繁查询的SQL语句进行优化,可以使用索引、视图、存储过程等技术来提高
如何优化Oracle数据库的性能
2024-03-02

服务器性能优化之网络性能优化

今天分享一篇后台服务器性能优化之网络性能优化,希望大家对Linux网络有更深的理解。

AS3性能优化

本篇文章用来总结本人对AS3性能优化方面的认识及经验,可能会有一些错误,敬请不吝赐教.如果想了解更多,请参考ADOBE方面的相关只是介绍.1,关于显示对象:    shape -> sprite -> moviechip我之所以这样写,是因
2023-01-31

编程热搜

目录