以下是我嵌套的SQL查询:的Sql嵌套查询的执行性能
SELECT M.UserID, SUM(M.Browser)
FROM
(
SELECT UserID, X.Browser
FROM
(
SELECT UserName, PCMLogEventID, MAX(Browser) AS Browser
FROM [PCMDBSERVER].[MISTestPCM_Raw].[dbo].[PCM_Log_FilterSwitchData]
WHERE [DateTime] BETWEEN '6/12/2013 12:00:00 AM' AND '6/12/2013 11:59:59 PM'
GROUP BY UserName, PCMLogEventID
) X
INNER JOIN (
SELECT *
FROM PCM_Stat_UserRepository
WHERE MachineID='All'
) Y
ON X.UserName = Y.UserName
) M
GROUP BY M.UserID
的执行时间 - 附SELECT子句内的查询(选择用户名,X.Browser),只需要1秒来执行,仅返回197行。但是,当我执行整个嵌套查询时,需要将近6分钟才能返回结果。任何人都可以帮助我理解为什么需要这么长时间?编号: 其实需要PCMLogEventID。因为PCM_Log_FilterSwitchData中的数据是这样的: UserName | PCMLogEventID |浏览器 abc | 111 | 0.9 abc | 111 | 1.2 abc | 222 | 1.2 abc | 222 | 3.5 。 。 因此,我首先通过将用户名& PCMLogEventID分组,然后对其进行求和。
'[PCM_Log_FilterSwitchData]'是一个视图吗?你为什么“GROUP BY PCMLogEventID”? – Devart
在内部查询的情况下,对于外部查询返回的每一行,将执行内部查询。因此,即使内部查询只需要几秒钟执行,外部查询可能会返回多行,导致内部查询的多次执行。 –
@Darshan梅塔,我不同意你 - 一切都取决于'执行计划'。 – Devart