Oracle数据库SQL优化
SQL优化的最终目的是用户体验-在最短时间内让用户在页面数据。因此,执行时间是SQL优化的重要指标。在SQL查询中,I/O操作最占系统性能的。I/O操作量越大,时间越久。减少I/O操作量是优化SQL的目标。同时,CPU,缓存命中率也很重要。
并不是所有SQL都需要被优化,使用频率高,性能差的SQL语句需要重点被优化。可以通过查看v$sqlarea表,访问OEM来查找。
注意不同版本的Oracle使用不同的优化器。11g的优化器基于代价(Cost Based Optimizer)(考虑SQL执行耗费的资源代价)11g之前是基于规则来优化的(Rule Based Optimizer)。优化要针对优化器来完成。
1.合理使用索引
原理:ORACLE是按行存储数据的(ROWID是行的位置) 而查询条件是列的,数据结构不同,查找速度慢。 建立按列存储的索引可以按列查找,数据在一个区域内,速度快。(弊端:事务处理起来不方便,增加了Insert, Update的执行时间)
原则:
适合使用索引的列:
1.经常被查询的列
2.经常排序分组的列
3.经常连接的列
不适合使用索引的列
1.数据经常更改的列
2.数据量小、重复性高的列
注意:
1.给索引指定单独的表空间可以增加IO性能
2.表完全导入完毕后再创立索引
3.表中总索引数不易过大
2.SQL语句的优化
1.用列名代替*
使用*,SQL会对每个列进行匹配,降低效率
2.当表与其他表没有任何关联时,可以用TRUNCATE代替DELETE
TRUNCATE没有事务控制,性能高,但是要注意无法被rollback
针对11g之前的优化方法 (基于规则的优化器)
1. 用EXISTS代替IN,DISTINCT
2. 二连表查询时,选择数据少的表作为驱动表(放在FROM的表列表的最后面)。循环驱动表中的数据和另一个表中的数据作连接查询。多表联查时,选择关联最多的表。
3. 表连接条件放前面,过滤记录多的条件的子句放后面(因为SQL执行顺序是从右到左)
3.表分区
将数据量大的表分区也可以提升查询效率,还可以方便表的管理,备份,和恢复,提高表的安全性。
分区方法:
范围分区
散列分区(根据哈希值)
列表分区 (明确指定列来分区)
指定分区查询
select * from table partition(pt_rule);
Oracle数据库SQL优化的更多相关文章
- ORACLE数据库SQL优化 not in 与not exits
各个表的数据量: sys_file_convert_queue 65989sys_att_file 73061sys_att_main 84405sys_att_rtf_data 1507 优化前,执 ...
- 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)
基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编 ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...
- Oracle 数据库SQL性能查看
作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作.下面简单介绍下一些查看 ...
- 基于oracle的sql优化
[基于oracle的sql优化] 基于oracle的sql优化 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 一.编写初衷描述 在应有系统开发初期,由于数据库 ...
- 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开发 ...
- 数据库sql优化总结之5--数据库SQL优化大总结
数据库SQL优化大总结 小编最近几天一直未出新技术点,是因为小编在忙着总结整理数据库的一些优化方案,特此奉上,优化总结较多,建议分段去消化,一口吃不成pang(胖)纸 一.百万级数据库优化方案 1.对 ...
- 我的mysql数据库sql优化原则
原文 我的mysql数据库sql优化原则 一.前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待. ...
随机推荐
- 递归模式学习(recursion)
所谓递归,就是方法调用自身.对于递归模式来说,要有一个出口来让递归结束,避免出现死循环. 实例全排列: 从n中拿出m个元素进行排列,当n==m时为全排列. 利用递归就是:把n个元素轮流放入第一个位置, ...
- JAX-RS入门 一 :基础
简介 JAX-RS是一套用java实现REST服务的规范,提供了一些标注将一个资源类,一个POJOJava类,封装为Web资源.标注包括: @Path,标注资源类或方法的相对路径 @GET,@PUT, ...
- C# 特性详解(上)
特性(attribute)是被指定给某一声明的一则附加的声明性信息. 元数据,就是C#中封装的一些类,无法修改.类成员的特性被称为元数据中的注释. 1.什么是特性 1)属性与特性的区别 属性 ...
- 使用Vagrant在Windows下部署开发环境
做Web开发少不了要在本地搭建好开发环境,虽然说目前各种脚本都有对应的Windows版,甚至是一键安装包,但很多时候和Windows环境的相性并不是那么好,各麻烦的问题是实际部署的环境通常是Linux ...
- Form动态下拉框
FORM级触发器:WHEN-NEW-FORM-INSTANCE 1.定义: V_LIST_NAME11 VARCHAR2(100) := 'QUERY_FIND.UPDATE_TYPE' ...
- Spring+Struts+Ibatis的配置
指定Spring配置文件位置 <context-param> <param-name>contextConfigLocation</param-name> < ...
- Nutch 教程
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- J2534 Pass-Thru Vehicle Programming ( SAE J1962 connector and Protocol )
SAE J1962—Diagnostic Connector SAE J1850—Class B Data Communications Network Interface SAE J1939—Tru ...
- intval()和(int)转换使用与区别
<?php echo "<br/>数值强制转换:"; $string="2a"; $string1=intval($string); echo ...
- android手机打电话代码分析
智能手机的打电话功能是由RIL部分来实现的,见下图: 开始分析Android源代码中的RIL部分. 又上图,以及其他相关资料,我得知在Android中有一个叫rild的守护进程.我猜测此进程与电话的拨 ...