SQL内连接与表别名' - 我可以优化此查询吗?

时间:2012-10-01 19:32:10

标签: sql query-optimization inner-join

我正在查看SSMS工具执行计划分析器,它说要尝试将其分解为更小的块。以下查询是我能做“这个”的最佳方式吗?非常感谢任何帮助!

SELECT t1.ID,
t1.col2,
t1.col3,
t1.col4,
t2.ID AS table2ID,
t2.col2,
t1.col5,
t1.col6,
t2.StatusID as table2StatusID
CASE WHEN LEN(t2.ErrorMessage) > 0 THEN t3.StatusName + ' ' + t2.ErrorMessage 
             ELSE t3.StatusName
     END AS SomeStatus,
     t3.StatusTypeID AS StatusTypeID
FROM table1 t1
INNER JOIN table2 t2 ON t1.ID = t2.ID
INNER JOIN table3 t3 ON t2.StatusID = t3.StatusID`

2 个答案:

答案 0 :(得分:0)

查询看起来非常简单。我想要的一个建议是,如果你可以将t2.ErrorMessage更改为null,如果它不存在那么你可以使用更有效的IsNull vs CASE。

答案 1 :(得分:0)

使用ISNULL()可以替换您的案例,这可能会降低每行处理成本。

t3.StatusName + ISNULL(' ' + t2.ErrorMessage, '') as SomeStatus

在不了解架构设置的情况下,很难说出可以进行优化的地方。什么可能是直观的优化可能违背业务逻辑并且无用。替代方案是正确的,如果不了解业务逻辑,可能会有一些捷径来获取不明显的数据。

相关问题