9.怎么避免使用特定索引
  在很多时候,Oracle会错误的使用索引而导致效率的明显下降,我们可以使用一点点技巧而避免使用不该使用的索引,如:
  表test,有字段a,b,c,d,在a,b,c上建立联合索引inx_a(a,b,c),在b上单独建立了一个索引Inx_b(b)。

  在正常情况下,where a=? and b=? and c=?会用到索引inx_a,where b=?会用到索引inx_b,但是,where a=? and b=? and c=? group by b会用到哪个索引呢?在分析数据不正确(很长时间没有分析)或根本没有分析数据的情况下,oracle往往会使用索引inx_b。通过执行计划的分析,这个索引的使用,将大大耗费查询时间。

  当然,我们可以通过如下的技巧避免使用inx_b,而使用inx_a。

  where a=? and b=? and c=? group by b||'' --如果b是字符
  where a=? and b=? and c=? group by b+0 --如果b是数字

  通过这样简单的改变,往往可以是查询时间提交很多倍
  当然,我们也可以使用no_index提示,相信很多人没有用过,也是一个不错的方法:
  select /*+ no_index(t,inx_b) */ * from test t
  where a=? and b=? and c=? group by b

  举例:
  本来在CM_USER上有索引IDX_CM_USER4(ACC_ID)和IDX_CM_USER8(BILL_ID),可是执行如下语句的时候很慢。
  select * from CM_USER where  acc_id =1200007175
  and user_status>0 and bill_id like '13%' order by acc_id,bill_id

  用explain分析,发现执行计划是用IDX_CM_USER8.如下查询
  select * from user_indexes where table_name ='CM_USER' 发现IDX_CM_USER8没有分析过。

  用下面语句执行计划改变
  select /*+INDEX(CM_USER IDX_CM_USER4)*/* from CM_USER where  acc_id =1200007175 and user_status>0 and bill_id like '13%' order by acc_id,bill_id

  或者分析索引
  exec dbms_stats.gather_index_stats(ownname => 'QACS1',indname => 'IDX_CM_USER8',estimate_percent => 5 );
  可以发现执行计划恢复正常。

10.Oracle什么时候会使用跳跃式索引扫描
  这是9i的一个新特性跳跃式索引扫描(Index Skip Scan).
  例如表有索引index(a,b,c),当查询条件为where b=?的时候,可能会使用到索引index(a,b,c),如,执行计划中出现如下计划:
  INDEX (SKIP SCAN) OF 'TEST_IDX' (NON-UNIQUE)

  Oracle的优化器(这里指的是CBO)能对查询应用Index Skip Scans至少要有几个条件:
  <1> 优化器认为是合适的。
  <2> 索引中的前导列的唯一值的数量能满足一定的条件(如重复值很多)。
  <3> 优化器要知道前导列的值分布(通过分析/统计表得到)。
  <4> 合适的SQL语句
  等。

11.怎么样创建使用虚拟索引
  可以使用nosegment选项,如
  create index virtual_index_name on table_name(col_name) nosegment;

  如果在哪个session需要测试虚拟索引,可以利用隐含参数来处理
  alter session set "_use_nosegment_indexes" = true;

  就可以利用explain plan for select ……来看虚拟索引的效果,利用@$ORACLE_HOME/rdbms/admin/utlxpls查看执行计划,最后,根据需要,我们可以删除虚拟索引,如普通索引一样
  drop index virtual_index_name;

  注意:虚拟索引并不是物理存在的,所以虚拟索引并不等同于物理索引,不要用自动跟踪去测试虚拟索引,因为那是实际执行的效果,是用不到虚拟索引的。

12.怎样监控无用的索引
  Oracle 9i以上,可以监控索引的使用情况,如果一段时间内没有使用的索引,一般就是无用的索引
  语法为:
  开始监控:alter index index_name monitoring usage;
  检查使用状态:select * from v$object_usage;
  停止监控:alter index index_name nomonitoring usage;

  当然,如果想监控整个用户下的索引,可以采用如下的脚本:
  set heading off
  set echo off
  set feedback off
  set pages 10000
  spool start_index_monitor.sql
  SELECT 'alter index '||owner||'.'||index_name||' monitoring usage;'
  FROM dba_indexes
  WHERE owner = USER;
  spool off
  set heading on
  set echo on
  set feedback on
  ------------------------------------------------
  set heading off
  set echo off
  set feedback off
  set pages 10000
  spool stop_index_monitor.sql
  SELECT 'alter index '||owner||'.'||index_name||' nomonitoring usage;'
  FROM dba_indexes
  WHERE owner = USER;
  spool off
  set heading on
  set echo on
  set feedback on

ORACLE学习笔记--性能优化3相关推荐

  1. ORACLE学习笔记--性能优化2

    5.怎么样根据OS进程快速获得DB进程信息与正在执行的语句 有些时候,我们在OS上操作,象TOP之后我们得到的OS进程,怎么快速根据OS信息获得DB信息呢? 我们可以编写如下脚本: $more who ...

  2. oracle并行收集统计信息慢,Oracle 学习之性能优化(四)收集统计信息

    emp表有如下数据.SQL> select ename,deptno from emp; ENAME   DEPTNO ------------------------------ ------ ...

  3. 【Unity】学习笔记 | 性能优化(一)—— 渲染

    Unity中,每一帧的渲染CPU和GPU都做了些什么 1. CPU检查场景中每个对象,判读他们是否应该被渲染.CPU收集即将被渲染的对象信息,并把这些信息分类为渲染指令(即draw calls) 2. ...

  4. oracle死锁trace,Oracle 学习之性能优化(十)锁

    锁(lock)是用于防止在访问相同的资源(包括用户对象.系统对象.内存.Oralce数据字典中的共享数据结构,最常见的是数据库表Table对象)时 ,事务之间的有害性 交互(存.取)的一种机制. 不同 ...

  5. Oracle 数据库的性能优化

    oracle数据库的性能优化 对于ORACLE数据库的数据存取,主要有四个不同的调整级别,第一级调整是操作系统级包括硬件平台,第二级调整是ORACLE RDBMS级的调整,第三级是数据库设计级的调整, ...

  6. oracle学习笔记 Oracle体系结构概述

    oracle学习笔记 Oracle体系结构概述 从这节开始,开始讲oracle数据库体系结构. 首先从总体上,从概述上把oracle整体的体系结构讲一下, 然后接下来的时间我们会一块一块的将oracl ...

  7. Oracle学习笔记 字符集概述

    Oracle 学习笔记 字符集概述 这节课开始讲oracle里面的字符集 偏重于原理和简单的一些判断以及实现 字符集它涉及到很多的东西 比如建库和操作系统环境 这节课把字符集的原理性的东西以及常见的操 ...

  8. oracle学习笔记 参数文件及数据库的启动和关闭

    oracle学习笔记 参数文件及数据库的启动和关闭 我们这节课把oracle的参数文件以及oracle的启动关闭讲一下 一)参数文件作用 先看oracle的参数文件 它由来已久了 我们知道oracle ...

  9. 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)

    深度学习笔记(一):logistic分类  深度学习笔记(二):简单神经网络,后向传播算法及实现  深度学习笔记(三):激活函数和损失函数  深度学习笔记:优化方法总结  深度学习笔记(四):循环神经 ...

最新文章

  1. 什么是Python?前景怎么样?
  2. 31 道 Java 核心面试题,统统打包给你!
  3. python3 string
  4. 4. 连续时间鞅(REN)
  5. 计算机io工作方式,QEMU/KVM和VirtIO工作模式
  6. 安装spss显示JAVA_请问mac安装spss,出现“java for MacOS 2017-001”无法安装到磁盘。怎么办?...
  7. 长沙中职英语计算机等级考试查询,湖南省中等职业教育公共基础课达标训练英语291-300...
  8. VMware vSphere 6.7之vSAN配置全程图解
  9. 谷歌升级AutoML,可用于大规模图像分类和物体检测
  10. [Java] 蓝桥杯ADV-83 算法提高 寻找三位数
  11. 机器人学基础(一):空间描述与坐标变换
  12. selenium与firefox、 chrome版本对应关系
  13. linux 开头是减号的文件名 如何进行文件操作 删除复制移动
  14. CPU GPU 扫盲帖
  15. 2020电工(初级)考试题库及电工(初级)模拟考试题
  16. 用VideoView实现播放本地的m3u8
  17. AspectJ GUIアプリの国際化
  18. java程序员微信群,欢迎准java行业人员加入,会一直更新
  19. 文字阴影 - text-shadow
  20. PhotoShop文件基本操作

热门文章

  1. office怎么像wps一样多栏_时常受到欺负怎么办?——要像对付野狗一样对付坏人!...
  2. 计算机控制试压,试压泵计算机控制系统电脑控制试压泵自动记录功能
  3. python实现登陆注册跳转_Python模拟登录和登录跳转的参考示例
  4. python os模块创建文件_Python使用os模块和fileinput模块来操作文件目录
  5. mac 上mysql怎么卸载不了_mac上mysql怎么卸载不了
  6. spring boot 教程(五)使用JdbcTemplate访问数据库
  7. 相分离在聚集多价信号蛋白过程中的作用Phase transitions in the assembly of multivalent signalling proteins
  8. grid studio python_Grid studio表格应用程序:Python的集大成者
  9. 大数据之有指导数据挖掘方法的模型
  10. etl spring_山寨一个Spring的@Component注解