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'
相关文档:
系统环境:Windows 7
软件环境:Visual C++ 2008 SP1 +SQL Server 2005
本次目的:编写一个航空管理系统
这是数据库课程设计的成果,虽然成绩不佳,但是作为我用VC++ 以来编写的最大程序还是传到网上,以供参考。用VC++ 做数据库设计并不容易,但也不是不可能。以下是我的程序界面,后面 ......
[精华] ORACLE的几种启动方式
http://www.chinaunix.net 作者:wuwenlong 发表于:2003-07-27 16:58:57
【发表评论】 【查看原文】 【Oracle讨论区】【关闭】
1、startup nomount
非安装启动,这种方式启动下可执行:重建控制文件、重建数据库
读取 ......
内容转自:http://david.btbbt.blog.163.com/blog/static/205989372009973357418/
登录远程SQL服务器
一 看ping 服务器IP能否ping通。
这个实际上是看和远程sql server 2000服务器的物理连接是否存在。如果不行,请检查网络,查看配置,当然得确保远程sql server 2000服务器的IP拼写正确。
二 在Dos或命令行 ......
CREATE PROCEDURE dbo.OutputData
@tablename varchar(200)
AS
declare @column varchar(1000)
declare @ ......