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);

时间: 2024-10-13 06:56:57

Oracle数据库SQL优化的相关文章

Oracle 数据库SQL性能查看

作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作.下面简单介绍下一些查看oracle性能的一些实用方法: 1.查询每台机器的连接数 select t.MACHINE,count(*) from v$session t group by t.MACHINE 这里所说的每台机器是指每个连接oracle数据库的服务器,每个服务器都有配置连接数据库的连接数,以websphere

【转】数据库SQL优化大总结之 百万级数据库优化方案

原帖地址:http://www.cnblogs.com/yunfeifei/p/3850440.html#undefined 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库. 备注.描

数据库SQL优化大总结之 百万级数据库优化方案(转)

出处:http://www.cnblogs.com/yunfeifei/p/3850440.htm 网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充.这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后,感觉好的话推荐给更多的人,让更多的人看到.纠正以及补充. 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对

(转)数据库SQL优化大总结之 百万级数据库优化方案

网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后,感觉好的话推荐给更多的人,让更多的人看到.纠正以及补充. 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id f

基于oracle的sql优化方法论

Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间.要达到上述目的,我们通常只有如下三种方法可以选择: 1.降低目标SQL语句的资源消耗: 2.并行执行目标SQL语句: 3.平衡系统的资源消耗. "方法1:降低目标SQL语句的资源消耗"以缩短执行时间,这是最常用的SQL优化方法.这种方法的核心是要么通过在不更改业务逻辑的情况下改写SQL来降低目标SQL语句的资源消耗,要么不改SQL但通过调整执行计划或相关表的数据来降低目标SQL语句的资源消耗. 方法2:并行执行

数据库SQL优化大总结之百万级数据库优化方案(转)

add by zhj: 作者没有指定是哪个数据库,这只是一个近似通用的总结.对于某个特定的数据库,有些条目可能并不适用. 原文:http://www.cnblogs.com/yunfeifei/p/3850440.html 网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后,感觉好的话推荐给更多的人,让更多的人看到.纠正以及补充. 1.对查询进行优化,要

转://从一条巨慢SQL看基于Oracle的SQL优化

http://mp.weixin.qq.com/s/DkIPwbDKIjH2FMN13GkT4w 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划.如何从执行计划中找到SQL执行慢的Root Cause.统计信息与cardinality问题.探索性能杀手Filter操作.如何进行逻辑重写让SQL起飞等多个维度进行解析,最终优化巨慢SQL语句,希望能够抛砖引玉,和大家一起探讨SQL优化方法. 另外,还简单介绍了两种解决疑难SQL优化问题的工具:1005

百万级数据库优化方案数据库SQL优化大总结

一.百万级数据库优化方案 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库. 备注.描述.评论之类的可以设置为 NULL,其他的,最好不要使用NULL. 不要以为 NULL 不需要空间,

数据库SQL优化大总结之 百万级数据库优化方

http://tw.streetvoice.com/anssm001/songs/album/93124674/ http://tw.streetvoice.com/anssm001/songs/album/93124684/ http://tw.streetvoice.com/anssm001/songs/album/93124698/ http://tw.streetvoice.com/anssm001/songs/album/93124716/ http://tw.streetvoice.