零、概述

在这之前,一直都是使用mysql来进行开发或者部署。最近及今后很长一段时间都要使用oracle,今天和同事也遇到一个oracle 慢查询问题。查了很多资料,这里记录备忘。持续更新ing。。。

一、查看执行计划

EXPLAIN PLAN FOR
待执行的sql;(不要忘了分号)
SELECT * FROM TABLE (dbms_xplan.display());
也可以使用下面这条,会显示更多信息:
SELECT     * FROM     TABLE (dbms_xplan.display(null,null,'advanced'));

可参考如下:

查看Oracle执行计划的几种常用方法-系列1

https://blog.csdn.net/bisal/article/details/38919181

二、查看索引

1、根据表名查询表上的索引

select
b.uniqueness, a.index_name, a.table_name, a.column_name
from all_ind_columns a, all_indexes b
where a.index_name=b.index_name
and a.table_name = upper('DISPATCHTASKINFO')
order by a.table_name, a.index_name, a.column_position;

其中,DISPATCHTASKINFO为表名。

这个呢,一般工具都可以查看,只是有时候新加了索引,在查看执行计划的时候,总是因为各种各样的原因没有生效,这时候执行上述语句,看看我们的索引是否

加成功了。

2、根据索引名,查询索引相关信息

select
b.uniqueness, a.index_name, a.table_name, a.column_name
from all_ind_columns a, all_indexes b
where a.index_name=b.index_name
AND
a.index_name = 'SYS_C0011421'
order by a.table_name, a.index_name, a.column_position;

注:标红为索引名字。

三、执行计划的执行顺序

一般,一个执行计划可能是下面这样的(在navicat for oracle中的执行效果):

那么,要怎么去读懂这个内容呢?

这边我也是参考了几个链接,写得比我好,我就不班门弄斧了。

1、看懂Oracle执行计划

https://www.cnblogs.com/Dreamer-1/p/6076440.html

这个里面,讲解执行计划的顺序的那部分可以参考下面的这个链接,讲得更清楚一点。

 
2、ORACLE执行计划的步骤和顺序

 

3、其中的 name 那一列,在部分情况下,即为索引的名字。可以根据第二节中的方法进行查询。

ps:这里需要注意的是,上面是navicat for oracle中的执行效果。

可以看到,这里面缩进相当不明显,可以换别的客户端。

比如Oracle Sql Developer中的效果好得多:

四、优化器模式

http://blog.itpub.net/17203031/viewspace-705012/

五、强制使用索引

select /*+ index(TABLE_NAME,INDEX_NAME) */ 

from RECORD

where entityId='' and entityType='blog';

在select后,添加类似于代码注释一样的东西,其中的红色标出来的部分,

TABLE_NAME写要使用的索引的表名,INDEX_NAME为索引名。

但是,这个只是hint,并不是真的强制使用,所以可能会被优化器忽略(优化器有自己的内在逻辑)。

六、索引失效的可能原因

oracle 索引失效原因及解决方法

https://www.cnblogs.com/cxxjohnson/p/5836203.html

我这边遇到的索引失效问题应该就是链接中提到的数据统计问题,后面执行了如下几条语句后即可以用上我新增的索引:

analyze table INCIDENTINFORMATION compute statistics;

ANALYZE TABLE INCIDENTINFORMATION COMPUTE STATISTICS FOR ALL INDEXED COLUMNS;

analyze table INCIDENTINFORMATION compute statistics for table for all indexes for all indexed columns;
 基于我的理解,上面这几条语句,会去分析索引,索引无非是key--》value集合,其中,key是索引中包含的列(如果是组合索引,则是多个列),value就是数据所在的行的rowid的集合。
最终呢,会得到这样的结果且被缓存起来:
指定一个索引,能知道对应的rowid集合是啥,集合的size多大(主要是后边CBO优化器根据这个来判断cost大小,选择是否走该索引)。
 
 
 

oracle索引优化的更多相关文章

  1. oracle 索引优化之distinct

    11G R2环境: --DISTINCT测试前的准备drop table t purge;create table t as select * from dba_objects;update t se ...

  2. Oracle索引梳理系列(九)- 浅谈聚簇因子对索引使用的影响及优化方法

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  3. Oracle学习总结(7)—— 常用的数据库索引优化语句总结

    不管是用C/C++/Java等代码编写的程序,还是SQL编写的数据库脚本,都存在一个持续优化的过程.也就是说,代码优化对于程序员来说,是一个永恒的话题. 近期,我们对之前编写的数据库脚本进行了全面的自 ...

  4. 【转】Oracle索引HINT的使用

    转自:Oracle索引HINT的使用       存储在数据库中数据的分布情况开发人员或管理员比Oracle优化器更加的清楚,在优化器不能作出最有查询路径选择的情况下,使用HINT(提示)人为的固定查 ...

  5. Oracle数据库优化的经验总结

    个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个 人理解应该分为物理的和逻辑的优化, 物理的是指oracle产品 ...

  6. Oracle索引梳理系列(八)- 索引扫描类型及分析(高效索引必备知识)

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  7. oracle性能优化之表设计

    数据库优化的目标无非是避免磁盘I/O瓶颈.减少CPU利用率和减少资源竞争.为了便于读者阅读和理解,笔者参阅了Sybase.Informix和Oracle等大型数据库系统参考资料,基于多年的工程实践经验 ...

  8. 【转载】我眼中的Oracle性能优化

    我眼中的Oracle性能优化 大家对于一个业务系统的运行关心有如下几个方面:功能性.稳定性.效率.安全性.而一个系统的性能有包含了网络性能.应用性能.中间件性能.数据库性能等等. 今天从数据库性能的角 ...

  9. Oracle索引梳理系列(二)- Oracle索引种类及B树索引

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

随机推荐

  1. 纯CSS3实现的顶部社会化分享按钮

    今天要分享一款纯CSS3实现的社会化分享按钮,它放置在网页的顶部,你可以选择将它固定在网页顶部,这样对用户分享内容就十分方便.这些社会化分享按钮的图标文件来自google和bootstrap的字体文件 ...

  2. 编译并使用带有OpenCL模块的OpenCV for android SDK

    OpenCV Android SDK中提供的静态.动态库是不支持OpenCL加速的,如果在程序中调用OpenCL相关函数,编译时不会报错,但运行时logcat会输出如下信息,提示OpenCL函数不可用 ...

  3. Eclipse + PyDev 快捷键

    ●多行缩进(减少缩进):tab/shift+tab ●复制行: Ctrl+Alt+方向键'↓' ●删除行:Ctrl+d ●自动完成:Alt+/  ●注释:Ctrl+/ ●窗口最大小:Ctrl+m == ...

  4. npm install mongoose错误解决

    今天安装mongoose一直报错,上图 具体的错误记录: info it worked if it ends with ok verbose cli [ 'C:\\Program Files\\nod ...

  5. CCProxy序列号及注册码

    CCProxy无限用户版序列号:JHEHIHCDDAHC 注册码:15f7f78febfaee55afeafefff7cb7fdfb3

  6. 使用System.Web.Optimization对CSS和JS文件合并压缩

    在ASP.NET MVC 中JS/CSS文件动态合并及压缩通过调用System.Web.Optimization定义的类ScriptBundle及StyleBundle来实现. 大致步骤如下: 1.A ...

  7. [Unity3D] 01 - Try Unity3D

    01. Move and Rotate 标准全局坐标系 Keyboard using UnityEngine; using System.Collections; public class NewBe ...

  8. Java使用选择排序法对数组排序

    编写程序,实现将输入的字符串转换为一维数组,并使用选择排序法对数组进行排序. 思路如下: 点击"生成随机数"按钮,创建Random随机数对象: 使用JTextArea的setTex ...

  9. Redis Cluster 简单安装配置

    1 新建目录 “/app/redis”,输入命令 mkdir -p /app/redis 2 先安装ruby-2.3.1.tar.gz 3 测试ruby是否安装成功,输入命令:gem,如果显示以下信息 ...

  10. 九度 1254:N皇后问题

    Leetcode 原题. 这里 N 最大会取到 13, TLE 了 代码 #include <iostream> #include <stdio.h> using namesp ...