ORACLE索引管理创新.pptx
文本预览下载声明
第10章 ORACLE索引管理;提升数据库性能最常用最有效的手段
针对不同的环境使用不同的索引来提升系统性能
认识索引的正面与反面影响
灵活的索引管理便于我们在实际工作中解决实际问题;通过本节课程的学习,我们应该掌握以下内容:
掌握索引的不同类型与用途
创建不同类型的索引
重新组织索引
删除索引
获取索引信息
监控索引的使用;B树索引
普通索引
函数索引
位图索引
;B树索引;位图索引;B树索引:用于OLTP系统,列值的唯一性比较高:身份证编号
位图索引:用于OLAP系统(数据仓库),列值的唯一性比较低:民族
B树索引与位图索引的根本区别在执行DML时锁定的行数不同, B树索引锁定一行,位图索引锁定一组数据。
实际测试B树索引与位图索引不同锁机制;索引 SQL语句中的 Where 条件列
平衡查询与数据更新的需要
将索引与表放在不同的表空间中,避免争用
针对大的索引考虑NOLOGGING选项
alter index idx_test001_obid nologging;
创建大型索引过程中由于需要排序,需要设置合适大小的PGA与临时表空间
创建大型索引时注意online参数的使用避免锁表以及数据,创建索引与DML相互进行锁定
在创建大型索引时注意放入后台进程执行,避免窗口中断造成创建索引中断;create index employees_last_name_idx
on employees(last_name)
pctfree 30
tablespace indx;;实际案例: 大表创建索引;创建一张包含50W行记录的表
使用online参数
在创建索引过程中,向正在创建索引的表中插入记录,观察是否存在等待现象
不使用online参数
在创建索引过程中,向正在创建索引的表中插入记录,观察是否存在等待现象
参考命令
create index employees_last_name_idx
on employees(last_name) online;
;使用create_bitmap_area_size参数为创建位图索引分配内存以提升创建速度
create bitmap index idx_emp_deptno
on emp (deptno)
online nologging tablespace users;
修改EMP表deptno列与其他列效果比较
查看会话阻塞信息t.sid为被阻塞sid,t.BLOCKING_SESSION为阻塞sid
select t.sid,t.USERNAME,t.BLOCKING_SESSION_STATUS,t.BLOCKING_SESSION from v$session t where t.BLOCKING_SESSION_STATUS=VALID;实际案例:位图索引对OLTP的影响;适用于where条件后通过函数计算的列,如下所示:
select count(*) from test001 where substr(object_name,1,3)=‘CON’;
创建函数索引
create index idx_test001_obname_func on test001(substr(object_name,1,3)) tablespace tbs_indexes;
上述select语句不能利用普通索引,但可利用此函数索引。;单列索引
create index IDX_TEST001_OBID on TEST001 (OBJECT_ID);
create index IDX_TEST001_OBNAME on TEST001 (OBJECT_NAME);
复合索引
create index IDX_TEST001_OBNAMEID on TEST001 (OBJECT_ID, OBJECT_NAME);
针对的SQL语句:
select count(*) from test001 where object_id=10001 and object_name=CON$‘;
当只有上述单列索引时此SQL语句将分别从两个索引检索数据并取交集获得最终数据
当创建上述复合索引后此SQL语句直接从复合索引中读取数据,此性能高于前面的利用两个单列索引进行查询;当删除表中数据时,索引中的数据块也会被删除,造成空闲空间,类似表的高水位问题,影响IO性能
使用alter index。。。rebuild命令进行重新组织
移动索引到新的表空间
回收删除数据所占用的空间提升空间利用率与性能
分析并查询索引结构
SQLanalyze index ------ validate structure; -分析索引结构SQLalter index ... compute stat
显示全部