Ниже приведен мой вложенный 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 (Select UserID, X.Browser) занимает всего 1 секунду, возвращая всего 197 строк. Однако, когда я выполняю весь вложенный запрос, для возврата результата требуется почти 6 минут. Может ли кто-нибудь помочь мне понять, почему это занимает так много времени?
РЕДАКТИРОВАТЬ: на самом деле необходим PCMLogEventID. Потому что данные в PCM_Log_FilterSwitchData примерно такие: UserName | PCMLogEventID | Браузер абв | 111 | 0,9 абс | 111 | 1.2 азбука | 222 | 1.2 азбука | 222 | 3.5 . . Таким образом, я сначала беру MAX, группируя UserName и PCMLogEventID, а затем его СУММУ.
[PCM_Log_FilterSwitchData]
это вид? А почему тыGROUP BY PCMLogEventID
? - person Devart   schedule 13.06.2013Execution Plan
. - person Devart   schedule 13.06.2013[PCMDBSERVER].[MISTestPCM_Raw].[dbo].[PCM_Log_FilterSwitchData]
на другом сервере? И можете ли вы подтвердить тег SQL Sever, который кто-то добавил? - person Mark Schultheiss   schedule 13.06.2013