我已经在SQL上工作了大约2年,现在正在进行基本查询(选择和更新语句)。我最近决定开始学习更多关于我一直在写的查询。我购买了培训套件(考试70-461)查询Microsoft SQL Server 2012,在最初的几章中,它提到了一堆关于查询优化和性能的内容。我可能会超越自己,但这总是引起我的兴趣。 在编写自定义报告的查询时,我发现自己在属性中编写了一个Select语句。我读到这对性能很糟糕,我想避免这样做。
这是我尝试为我的查询选择的属性。
(LEFT(DATEADD(HOUR, -4,(CAST((Select Table2.Column1 from Table2 where [Text] = N'TextString.' and Table1.Column1 = Table2.Column2) AS Time))),8)) as "End Time"
SELECT
CAST(TABLE1.column1 AS date) as Date
, DBO.Table2.column2 AS [Table2 ID]
, CASE [queueID]
WHEN 2 THEN N'Scenario 1'
WHEN 3 THEN N'Scenario 2'
WHEN 4 THEN N'Scenario 3'
WHEN 5 THEN N'Scenario 4'
WHEN 6 THEN N'Scenario 5'
WHEN 7 THEN N'Scenario 6'
WHEN 8 THEN N'Scenario 7'
WHEN 9 THEN N'Scenario 8'
WHEN 10 THEN N'Scenario 9'
ELSE N'Scenario 10'
END AS "Name"
, RIGHT (Column5,11) as "Number"
, LEFT (DATEADD(HOUR, -4, (CAST (TABLE1.column1 AS time))),8) as "Start Time"
, LEFT(DATEADD(HOUR, -4, (CAST((Select TABLE1.column1 from TABLE1 where [Text] = N'TEXT STRING.' and [Table2].column2 = TABLE1.column2) AS Time))),8) as "End Time"
FROM
[CcMain].[dbo].[Table2] WITH (NOLOCK)
INNER JOIN TABLE1 WITH (NOLOCK)
ON TABLE1.column2 = [Table2].column2
WHERE
([Table2.Column3] =N'8' Or Table2.Column3 is null)
AND [Column4] IS NULL
AND CAST (StartTime AS date) = DATEADD(day, -1, CONVERT(date, SYSUTCDATETIME(),101))
AND [Text] = N'TeXT string 2.'
;
答案 0 :(得分:1)
看起来您正在使用子查询来进行连接。最好将其写为Table1 JOIN Table2 ON TAble1.Column1 = Table2.Column2。
然而,这并不意味着你永远不应该在子查询中做SELECT。相反,你应该在不必要时避开它们。