2

我正在查看 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`
4

2 回答 2

0

查询似乎很简单。我的一个建议是,如果您可以将 t2.ErrorMessage 更改为 null(如果它不存在),那么您可以使用 IsNull 与 CASE 更有效。

于 2012-10-01T19:44:14.413 回答
0

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

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

在不了解您的架构设置的情况下,很难判断可以在哪里进行优化。可能是直观的优化可能会违背业务逻辑并且毫无用处。另一种选择是正确的,在不了解业务逻辑的情况下获取不明显的数据可能会有一些捷径。

于 2012-10-01T19:48:09.293 回答