oracle索引优化
零、概述
在这之前,一直都是使用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
这个里面,讲解执行计划的顺序的那部分可以参考下面的这个链接,讲得更清楚一点。
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,并不是真的强制使用,所以可能会被优化器忽略(优化器有自己的内在逻辑)。
六、索引失效的可能原因
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;
oracle索引优化的更多相关文章
- oracle 索引优化之distinct
11G R2环境: --DISTINCT测试前的准备drop table t purge;create table t as select * from dba_objects;update t se ...
- Oracle索引梳理系列(九)- 浅谈聚簇因子对索引使用的影响及优化方法
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- Oracle学习总结(7)—— 常用的数据库索引优化语句总结
不管是用C/C++/Java等代码编写的程序,还是SQL编写的数据库脚本,都存在一个持续优化的过程.也就是说,代码优化对于程序员来说,是一个永恒的话题. 近期,我们对之前编写的数据库脚本进行了全面的自 ...
- 【转】Oracle索引HINT的使用
转自:Oracle索引HINT的使用 存储在数据库中数据的分布情况开发人员或管理员比Oracle优化器更加的清楚,在优化器不能作出最有查询路径选择的情况下,使用HINT(提示)人为的固定查 ...
- Oracle数据库优化的经验总结
个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个 人理解应该分为物理的和逻辑的优化, 物理的是指oracle产品 ...
- Oracle索引梳理系列(八)- 索引扫描类型及分析(高效索引必备知识)
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- oracle性能优化之表设计
数据库优化的目标无非是避免磁盘I/O瓶颈.减少CPU利用率和减少资源竞争.为了便于读者阅读和理解,笔者参阅了Sybase.Informix和Oracle等大型数据库系统参考资料,基于多年的工程实践经验 ...
- 【转载】我眼中的Oracle性能优化
我眼中的Oracle性能优化 大家对于一个业务系统的运行关心有如下几个方面:功能性.稳定性.效率.安全性.而一个系统的性能有包含了网络性能.应用性能.中间件性能.数据库性能等等. 今天从数据库性能的角 ...
- Oracle索引梳理系列(二)- Oracle索引种类及B树索引
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
随机推荐
- [转]jmeter实战
[转]http://blog.csdn.net/ultrani/article/details/8309932 本文主要介绍性能测试中的常用工具jmeter的使用方式,以方便开发人员在自测过程中就能自 ...
- datatable删除一行方法
t.row($(e).parents('tr')[0]).remove().draw(false); t为定义的datatable对象,row里面传入当前行的DOM元素.
- Java实习生面试题整理
一.数据类型 包装类型 八个基本类型: boolean/1 byte/8 char/16 short/16 int/32 float/32 long/64 double/64 基本类型都有对应的包装类 ...
- Spring MVC手札
本文用于记录使用Spring MVC中的零散手札 1.在普通java类中获取HttpServletRequest对象 在web.xml的listener节点加入 <listener> & ...
- node.js模块依赖及版本号
摘要: Node.js最重要的一个文件就是package.json,其中的配置参数决定了功能.例如下面就是一个例子 { "name": "test", &quo ...
- C#------Aspose的License文件
Aspose官网: https://docs.aspose.com/display/cellsnet/Home 下载地址: http://vdisk.weibo.com/s/uoya0tRiZNf0X ...
- SpringMVC -- 梗概--源码--壹--springMVC json处理
附:实体类 Class : User package com.c61.entity; import java.text.SimpleDateFormat; import java.util.Date; ...
- 8 -- 深入使用Spring -- 3...1 Resource实现类FileSystemResource
8.3.1 Resource实现类------FileSystemResource:访问文件系统的资源的实现类 3.访问文件系统资源 Spring提供的FileSystemResource类用于访问文 ...
- ios8 UITableView设置 setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法
在ios7中,UITableViewCell左侧会有默认15像素的空白.这时候,设置setSeparatorInset:UIEdgeInsetsZero 能将空白去掉. 但是在ios8中,设置setS ...
- 【Postgres】PostgreSQL配置远程连接
1.开启相应的防火墙端口,缺省是5432 2.访问权限配置,D:\Program Files (x86)\PostgreSQL\9.2\data/pg_hba.conf中加入如下配置,开启远程访问 3 ...