对oracle中SQL优化的理解
Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间。要达到上述目的,我们通常只有如下三种方法可以选择:
1、降低目标SQL语句的资源消耗。
2、并行执行目标SQL语句。
3、平衡系统的资源消耗。
方法1:a、在不更改业务逻辑的情况下改写SQL来降低目标SQL语句的资源消耗。
b、不改写SQL但通过调整执行计划或相关表的数据来降低目标SQL语句的资源消耗。
注意:走索引不一定比全表扫描好,例如在很多情况下走索引的嵌套循环连接的执行效率往往比不上走全表扫描的哈希连接的执行效率。
方法2:实际上是以额外的资源消耗来换取执行时间的缩短,很多情况下使用并行是针对某些SQL的唯一优化手段。
方法3:可以避免不必要的资源争用所导致的目标SQL语句执行时间的增长。由于在目标SQL执行时系统处于高负荷状态,执行目标SQL所需的
硬件资源(CPU、内存、I/O等)得不到保障,存在争用的情况。在这种情况下,我们可以把一些与目标SQL同时执行的不重要但很消耗系统资源
的操作(如报表、批处理等)挪到系统不忙的时候执行。
Oracle数据库里做SQL优化的具体步骤:
1、找到执行时间最长、消耗系统资源最多的Top SQL语句。
2、查看上述Top SQL语句的执行计划,并结合器资源消耗情况和相关统计信息、trace文件来分析其执行计划是否合理。
3、通过修正措施(如:调整上述Top SQL的执行计划等)来对上述Top SQL做调整以缩短它们的执行时间,这里调整的指导原则就是前面介绍的
三种方法。
针对Top SQL的常用调整手段:
1、如果是统计信息不准或是因为CBO计算某些SQL的成本所用公式的先天不足而导致的SQL性能问题,我们可以通过重新收集统计信息,或者手工
修改统计信息,或者使用Hint来加以解决。
注释:对表收集统计信息的方式 exec dbms_stats.gather_table_stats(ownname=>'数据库用户名',tabname=>'表名',method_opt=>'for all
columns size 1',CASCADE=>true,estimate_percent=100);
2、如果是SQL语句的写法问题,我们可以通过在不更改业务逻辑的情况下改写SQL来解决问题。
3、如果是不必要的全表扫描/排序而导致的目标SQL的性能问题,我们可以通过建立合适的索引(包括函数索引、位图索引等)来加以解决。
4、如果是因为各种原因导致目标SQL的执行计划不稳定,我们可以通过使用Hint、SQL Profile或者SPM来解决问题。
5、如果是表或者索引的不良设计导致的目标SQL的性能问题,我们可以通过重新设计表/索引,重新组织表里的数据来解决问题。
6、如果上述调整措施都失效,我们可以考虑用并行来缩短目标SQL的执行时间。
7、如果上述调整措施(包括并行)都失效,我们还可以再联系实际业务的基础上更改目标SQL的执行逻辑,甚至不执行目标SQL,这是最彻底的
优化了。
对oracle中SQL优化的理解的更多相关文章
- oracle中sql优化
问题描述:刚开始做项目的时候没啥感觉,只用能出来结果,sql随便写,但是后来用户的数据量达到几万条是,在访问系统,发现很多功能加载都很慢,有的页面一个简单的关联 查询居然要花费30多秒,实在是不能忍, ...
- oracle中sql语句的优化
oracle中sql语句的优化 一.执行顺序及优化细则 1.表名顺序优化 (1) 基础表放下面,当两表进行关联时数据量少的表的表名放右边表或视图: Student_info (30000条数据)D ...
- 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)
基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编 ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...
- Oracle之SQL优化专题01-查看SQL执行计划的方法
在我2014年总结的"SQL Tuning 基础概述"中,其实已经介绍了一些查看SQL执行计划的方法,但是不够系统和全面,所以本次SQL优化专题,就首先要系统的介绍一下查看SQL执 ...
- 转://从一条巨慢SQL看基于Oracle的SQL优化
http://mp.weixin.qq.com/s/DkIPwbDKIjH2FMN13GkT4w 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划.如何从 ...
- 从一条巨慢SQL看基于Oracle的SQL优化(重磅彩蛋+PPT)
本文根据DBAplus社群第110期线上分享整理而成,文末还有好书送哦~ 讲师介绍 丁俊 新炬网络首席性能优化专家 SQL审核产品经理 DBAplus社群联合发起人.<剑破冰山-Oracle开发 ...
- Oracle之SQL优化专题03-如何看懂SQL的执行计划
专题第一篇<Oracle之SQL优化专题01-查看SQL执行计划的方法>讲到了查看SQL执行计划的方法,并介绍了各种方法的应用场景,那么这一篇就主要介绍下如何看懂SQL的执行计划.毕竟如果 ...
- 读书笔记-《基于Oracle的SQL优化》-第一章-3
优化器: 1.优化器的模式: 用于决定在Oracle中解析目标SQL时所用优化器的类型,以及决定当使用CBO时计算成本值的侧重点.这里的“侧重点”是指当使用CBO来计算目标SQL各条执行路径的成本值时 ...
- 基于oracle的sql优化
[基于oracle的sql优化] 基于oracle的sql优化 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 一.编写初衷描述 在应有系统开发初期,由于数据库 ...
随机推荐
- MYSQL + MHA +keepalive + VIP安装配置(三)--keepalived安装配置
一.概述 keepalived介绍:Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web 服务器从系统中剔除 ...
- 小程序渲染html的两种方法
一.使用文档自带的原生API rich-text, nodes属性直接绑定需要渲染的html内容即可,文档参见这里:https://developers.weixin.qq.com/miniprog ...
- [IR] Concept Search and PLSA
[Topic Model]主题模型之概率潜在语义分析(Probabilistic Latent Semantic Analysis) 感觉LDA在实践中的优势其实不大,学好pLSA才是重点 阅读笔记 ...
- [React] 03 - Intro: react.js in twelve demos
Ref: React 入门实例教程 这算什么,react学习例子的十二门徒?哈哈 如何运行别人的react项目? Ref: [React全家桶入门之CODE]项目代码与使用方法 使用git克隆项目到本 ...
- 【Oracle】删除所有表
BEGIN FOR cur_rec IN (SELECT object_name, object_type FROM user_objects WHERE object_type IN ('TABLE ...
- 网络编程 -- RPC实现原理 -- NIO多线程 -- 迭代版本V1
网络编程 -- RPC实现原理 -- 目录 啦啦啦 V1——设置标识变量selectionKey.attach(true);只处理一次(会一直循环遍历selectionKeys,占用CPU资源). ( ...
- LUA重难点解析
1.元表 元表也是一个 table,它附加在另一个 table 上,可以扩展该 table 的某些行为. 拿 __index 来举例,它是用来扩展查找索引行为的.在查找一个 key 对应的值时,会依次 ...
- 跨服务器做yum源
服务器无法上网,然后自己根据光盘搭建的YUM源不够用.RPM安装软件,各种依赖,找包烦死. 先做个 能上外网的 http proxy 找一个可以上Internet的服务器,然后起一个squid服务, ...
- python nose测试框架全面介绍十---用例的跳过
又来写nose了,这次主要介绍nose中的用例跳过应用,之前也有介绍,见python nose测试框架全面介绍四,但介绍的不详细.下面详细解析下 nose自带的SkipTest 先看看nose自带的S ...
- Linux之vmware安装
环境准备 mac 用 vmware fusion 虚拟机 和 iterm2 远程连接工具, ...