WEB开发网
开发学院数据库MSSQL Server SQL Server性能优化综述 阅读

SQL Server性能优化综述

 2008-08-27 09:57:43 来源:WEB开发网   
核心提示: SELECTPUB_NAMEFROMPUBLISHERSWHEREPUB_IDIN(SELECTPUB_IDFROMTITLESWHERETYPE='BUSINESS')可以改写成:SELECTDISTINCTA.PUB_NAMEFROMPUBLISHERSAINNERJ

   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子句和选择列确定的结果集作集合操作,游标是提供的一个非集合操作的途径。一般情况下,游标实现的功能往往相当于客户端的一个循环实现的功能,所以,大部分情况下,我们把游标功能搬到客户端。

上一页  3 4 5 6 7 8 9 10  下一页

Tags:SQL Server 性能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接