ORACLE SQL性能优化大总结
ORACLE SQL性能优化大总结
1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):
" ?; J) n+ v8 J- v" q Oracle的解析器按照从右到左的顺序处理from子句中的表名,from子句中写在最后的表(基础表 driving table)将被最先处理,在from子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。假如有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.
7 Y6 A% _; P7 R$ K8 k+ i' B2 G(2) WHERE子句中的连接顺序.: 7 _' p! V& j0 t
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.
0 \ _- K* U7 q3 A- v G(3) SELECT子句中避免使用 ‘ * ‘: " S. l, j9 `4 ^& Y7 K$ A
ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间 / a" Q! e3 U2 s8 e+ S4 T
(4) 减少访问数据库的次数: 8 d0 y! R/ w! y. D8 t e9 [7 I' ]# s
ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等; ) T0 @ M; r( k8 H) @$ h
(5) 在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200 8 u% p8 @$ p9 t2 e' }4 B# }
(6) 使用DECODE函数来减少处理时间:
8 i- k$ O- d& k/ Q 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表.
$ L; z2 I g" x! s. r! E(7) 整合简单,无关联的数据库访问:
I# L8 o9 F9 W7 i2 i3 n0 a" i 假如你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系)
/ O3 W+ r; ^ t; s; E* t1 U' P(8) 删除重复记录: 8 v P- d3 o$ z
最高效的删除重复记录方法 ( 因为使用了ROWID)例子:
1 K5 I3 Y: X6 a ]8 PDELETE from EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) / J5 ]1 Z7 x/ {0 K
from EMP X WHERE X.EMP_NO = E.EMP_NO); $ b w: W3 J9 i/ Z) ^
(9) 用TRUNCATE替代DELETE: 9 y6 {7 l'
相关文档:
oracle表空间操作详解
1
2
3作者: 来源: 更新日期:2006-01-04
5
6
7建立表空间
8
9CREATE TABLESPACE data01
10DATAFILE '/ora ......
下载地址:
http://www.itsoba.com/Article.asp?id=847
视频介绍:
本套ORACLE视频教程为传智播客内部经典教学视频的一集,后续视频正在录制和整理中,敬请关注。
讲师介绍:
王治国,有多年软件开发经验和教学经验,先后在多家软件公司担任软件工程师、项目经理,精通J2SE、J2ME、J2EE、Linux、Oracle、SqlS ......
sql核心语句(非常实用的几个技巧)插入数据
向表中添加一个新记录,你要使用 sql INSERT 语句。这里有一个如何使用这种语句的例子:
INSERT mytable (mycolumn ......
oracle常用经典SQL查询
常用SQL查询:
1、查看表空间的名称及大小
select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
from dba_tablespaces t, dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;
2、查看表空间物理文件的名称 ......