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普遍的规则,对于某些特殊情况得特殊对待. ...
随机推荐
- HDU 5707 Combine String (DP,LCS变形)
题意:给定三个字符串,问你第三个是不是由第一个和第二个组成的. 析:当时比赛是没有做出来啊...一直WA,就是没有判断长度,第一个和第二个和是不是和第三个一样,这个忘记... 我们用d[i][j]表示 ...
- PHP时间格式化封装函数
/*格式化时间戳为小时,分钟,秒,几天前等 */function dgmdate($timestamp, $format = 'dt', $timeoffset = '9999', $uformat ...
- jquery easyui-linkButton获取和设置按钮text并且解决火狐不支持innerText的方法
<a href="javascript:test" id="btn" class="easyui-linkbutton" iconCl ...
- Gartner:Hype Cycle for Emerging Technologies-2013
The “Hype Cycle for Emerging Technologies” report is the longest-running annual Hype Cycle, provid ...
- 给Oracle锁住的行解锁
1.找出数据库的serial#,以备杀死: select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$s ...
- Django官方文档学习2——数据库及模板
网址:https://docs.djangoproject.com/en/1.10/intro/tutorial02/ 1.扫描installed_apps,创建需要的数据库table python ...
- listView divider marginLeft marginRight
要实现这样的效果: 新建drawable 用inset 进行实现.代码如下: <?xml version="1.0" encoding="utf-8"? ...
- 二进制程序分析工具Pin在Windows系统中的安装和使用方法
这篇日志其实很弱智,也是因为换了新电脑,实验环境不全(当然,做这个实验我是在虚拟机里,因为接下来想拿些恶意代码的数据),所以这里记录一下在Windows下怎么安装和使用Pin这个程序分析领域最常用的工 ...
- ThreadPool for Delphi
http://sourceforge.net/projects/threadpoolpas/ http://hivelocity.dl.sourceforge.net/project/threadpo ...
- linux下oracle11g R2的启动与关闭监听、数据库
su - oracle 切换到oracle账户 lsnrctl start 启动监听 sqlplus /nolog 登陆sqlplus conn /as ...