SQL Server性能优化综述
2008-08-27 09:57:43 来源:WEB开发网 SELECTPUB_NAME
FROMPUBLISHERS
WHEREPUB_IDIN
(SELECTPUB_ID
FROMTITLES
WHERETYPE='BUSINESS')
可以改写成:
SELECTDISTINCTA.PUB_NAME
FROMPUBLISHERSAINNERJOINTITLESB
ONB.TYPE='BUSINESS'AND
A.PUB_ID=B.PUB_ID
C、 IN的相关子查询用EXISTS代替,比如
SELECTPUB_NAME
FROMPUBLISHERS
WHEREPUB_IDIN
(SELECTPUB_ID
FROMTITLES
WHERETYPE='BUSINESS')
可以用下面语句代替:
SELECTPUB_NAME
FROMPUBLISHERS
WHEREEXISTS
(SELECT1
FROMTITLES
WHERETYPE='BUSINESS'AND
PUB_ID=PUBLISHERS.PUB_ID)
D、不要用COUNT(*)的子查询判断是否存在记录,最好用LEFT JOIN或者EXISTS,比如有人写这样的语句:
SELECTJOB_DESCFROMJOBS
WHERE(SELECTCOUNT(*)FROMEMPLOYEEWHEREJOB_ID=JOBS.JOB_ID)=0
应该改成:
SELECTJOBS.JOB_DESCFROMJOBSLEFTJOINEMPLOYEE
ONEMPLOYEE.JOB_ID=JOBS.JOB_ID
WHEREEMPLOYEE.EMP_IDISNULL
SELECTJOB_DESCFROMJOBS
WHERE(SELECTCOUNT(*)FROMEMPLOYEEWHEREJOB_ID=JOBS.JOB_ID)<>0
应该改成:
SELECTJOB_DESCFROMJOBS
WHEREEXISTS(SELECT1FROMEMPLOYEEWHEREJOB_ID=JOBS.JOB_ID)
6、 慎用游标
数据库一般的操作是集合操作,也就是对由WHERE子句和选择列确定的结果集作集合操作,游标是提供的一个非集合操作的途径。一般情况下,游标实现的功能往往相当于客户端的一个循环实现的功能,所以,大部分情况下,我们把游标功能搬到客户端。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接