WEB开发网
开发学院数据库MSSQL Server SQL Server性能调优杂记(一)----傻瓜机的失... 阅读

SQL Server性能调优杂记(一)----傻瓜机的失效效应

 2008-12-08 10:15:23 来源:WEB开发网   
核心提示: 即等价的SQL文应该是SELECT ISNULL(a.CWB_NO,b.CWB_NO) AS CWB_NO,a.IMPORT_AWB_NO,a.IMPORT_BWB_NO,ISNULL(a.PCS,0) AS RS2PCS,ISNULL(b.PCS,0) AS DECPCS,a.CCC_S

即等价的SQL文应该是

SELECT ISNULL(a.CWB_NO,b.CWB_NO) AS CWB_NO,a.IMPORT_AWB_NO,
a.IMPORT_BWB_NO,ISNULL(a.PCS,0) AS RS2PCS,ISNULL(b.PCS,0) AS DECPCS,a.CCC_STATUS
FROM 
(SELECT * FROM  TB_CWB WHERE IMPORT_AWB_NO = '25200000011') a
FULL JOIN 
(SELECT * FROM  TP_DECSUMMARY WHERE AWB_NO ='25200000011') b
ON  a.CWB_NO = b.CWB_NO AND  b.AVAILABLE = 'Y'
WHERE a.AVAILABLE = 'Y'

而我调试用的替换SQL文

DECLARE @IMPORT_AWB_NO VARCHAR(20)
SET @IMPORT_AWB_NO='25200000011'
SELECT ISNULL(a.CWB_NO,b.CWB_NO) AS CWB_NO,
a.IMPORT_AWB_NO,
a.IMPORT_BWB_NO,
ISNULL(a.PCS,0) AS RS2PCS,
ISNULL(b.PCS,0) AS DECPCS,
a.CCC_STATUS
FROM  (
SELECT *
FROM  TB_CWB
WHERE IMPORT_AWB_NO = @IMPORT_AWB_NO
) a
FULL JOIN  (SELECT *
FROM  TP_DECSUMMARY
WHERE AWB_NO = @IMPORT_AWB_NO) b
ON  a.CWB_NO = b.CWB_NO
AND  b.AVAILABLE = 'Y'
WHERE a.AVAILABLE = 'Y'

这个即相当于SP的写法。

这2句的结果导致就是执行计划完全不一样。从而产生天壤之别的效果。这个问题和SQL文的好坏没有关系。我对比了者2个执行计划,个人认为由于SQL Server的CBO分析这个“傻瓜机”失效效应导致。

我们先看一下2种的执行计划的区别。我用第2种(即SP)方法的执行计划。

SQL Server性能调优杂记(一)----傻瓜机的失效效应

Tags:SQL Server 性能

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