您的位置:首页 > 数据库

SQLServer性能优化之改写SQL语句

2010-07-28 17:03 337 查看
性能优化之SQL语句改写

有这样一条SQL,在系统性能视图中显示执行时间30秒,单独拿出来执行时间6秒

SELECT *

FROM TABLEA

WHERE COND1 AND (A.FIELD2<>6 AND A.FIELD1 NOT IN (SELECT REPLACE(FIELD1,'Y','') FROM TABLEB WHERE ...)

OR

A.FIELD2=6 AND A.FIELD1 NOT IN (SELECT FIELD1 FROM TABLEB WHERE ...)

)

ORDER BY 1

优化步骤

首先把COND1之前的语句拿出来执行约0秒

其次分别执行每个单独的子查询(NOT IN中的子查询)语句也是0秒

再次把OR的语句分别执行,发现执行速度均是0秒

分析问题可能出现在两个子查询的合并上,干脆直接把SQL语句改写成两个独立的语句再进行UNION试试看,如下格式

SELECT * FROM

(

SELECT * FROM TABLEA WHERE COND1 AND A.FIELD2<>6 AND A.FIELD1
NOT IN (SELECT REPLACE(FIELD1,'Y','') FROM TABLEB WHERE ...)

UNION

SELECT * FROM TABLEA WHERE COND1 AND A.FIELD2=6 AND A.FIELD1 NOT IN (SELECT FIELD1 FROM TABLEB WHERE ...)

)A

ORDER BY 1

执行后0秒,OK!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: