{转}SQL优化34 条建议
	
    
    
	(1)  选择最有效率的表名顺序
(
只在基于规则的优化器中有效
)
:
ORACLE 的解析器按照从右到左的顺序处理
from
子句
中的表名,
from
子句中写在最后的表
(
基础表 
driving table)
将被最先处理,在
from
子句中包含多个表的情况下
,
你必须选
择记录条数最少的表作为基础表。如果有
3
个以上的表连接查询
, 
那就需要选择交叉表
(intersection table)
作为基础表
, 
交叉表是指那个被其他表所引用的表
.
(2)   WHERE子句中的连接顺序:
ORACLE采用自下而上的顺序解析
WHERE
子句
,
根据这个原
理
,
表之间的连接必须写在其他
WHERE
条件之前
, 
那些可以
过滤掉最大数量记录的条件必须写在
WHERE
子句的末尾
.
(3)   SELECT子句中避免使用 
‘ 
* 
‘
:
ORACLE在
解析的过程中
, 
会将
'*' 
依次转换成所有的列名
, 
这个工作是通过查询数据字典完成的
, 
这意味
着将耗费更多的时间
(4)  减少访问数
据库的次数:
ORACLE在
内部执行了许多工作
: 
解析
SQL
语句
, 
估算索引的利用率
, 
绑定变量 
, 
读数据块
等;
(5)  在
SQL*Plus , SQL*Forms
和
Pro*C
中重新设置
ARRAYSIZE
参数
, 
可以增加每次数据库访问的检索数据量 
,
建议值为
200
(6)  使用
DECODE
函数来减少处理时间:
使用DECODE
函
数可以避免重复扫描相同记录或重复连接相同的表
.
(7)  整合简单
,
无关联的数据库访问:
如果你有几个简单的数据
库查询语句,
你可以把它们整合到一个查询中
(
即使它们之间没有关系
)
(8)  删除重复记
录:
最高效的删除重复记录方法 ( 
因为使用了
ROWID)
例子:
DELETE  from  EMP E  WHERE  E.ROWID > (SELECT MIN(X.ROWID)
from  EMP X  WHERE  X.EMP_NO = E.EMP_NO);
(9)  用
TRUNCATE
替代
DELETE
:
当删除表中的记录时,
在通常情况
下
, 
回滚段
(rollback segments ) 
用来存放可以被恢复的信息
. 
如果你
    
     
	
	
    
    
	相关文档:
        
    
    遇到MS SQL Server 2005 无法删除数据库作业。
  首先,以sa账户登录,查看以下2个表的数据,如果不为空就有问题。
  Sql代码
  select * from msdb.dbo.sysmaintplan_subplans
  select * from msdb.dbo.sysmaintplan_log
  如果不为空,执行以下操作,基本上不用考虑删除哪一条记录,有问题的作业就 ......
	
    
        
    
    在数据库中有一张表mytable,数据记录7000万条,有如下两条SQL语句
1.
select top 100 * from mytable order by operateDate
2.
select * from (select top 100 * from mytable ) a   order  by a.operateDate
      起初我使用第一条语句查询数据,并希望将得到的 ......
	
    
        
    
    贺州市疾病预防控制中心所用的ZmSoft从业体检信息网络系统V2010.1.26 正式版采用SQL SERVER2000平台,不明原因,数据库"置疑“,客户试过所有网上方法,未能解决.沈阳凯文数据恢复中心SQL数据库工程师成功将其解决.
沈阳凯文数据恢复中心MS SQL SERVER研发小组致力于MsSql数据库技术的研究。经过多年研究完全掌握了S ......
	
    
        
    
    1、该用户有登录权限。 
2、Server如果开了Firewall,在exceptions里添加1433 port 。
3、配置工具->SQL Server外围应用配置器->服务和连接的外围应用配置器->打开MSSQLSERVER节点下的 Database Engine 节点,选择“远程连接”,接下建议选择"同时使用TCP/IP和named pipes",确定后,重启数据库服务后 ......