Я пытаюсь выяснить, что происходит с запросом T- SQL, показанным ниже.
Вы увидите два внутренних соединения в одной и той же таблице, хотя и с разными критериями соединения. Первое соединение само по себе выполняется примерно за 21 секунду, и если я запускаю второе соединение само по себе, оно завершается примерно через 27 секунд.
Если я оставлю оба соединения на месте, запрос будет запускаться и выполняться, пока я не остановлю запрос. Соответствующие индексы, похоже, на месте, и я знаю, что этот запрос выполняется в другой среде с меньшей мощностью, единственное отличие состоит в том, что на другом сервере запущен SQL Server 2012, а на моем компьютере SQL Server 2016, хотя база данных в режиме совместимости 2012:
Это объединение выполняется за ~ 21 секунду.
SELECT
COUNT(*)
FROM
dbo.SPONSORSHIP as s
INNER JOIN
dbo.SPONSORSHIPTRANSACTION AS st
ON st.SPONSORSHIPCOMMITMENTID = s.SPONSORSHIPCOMMITMENTID
AND st.TRANSACTIONSEQUENCE = (SELECT MIN(TRANSACTIONSEQUENCE)
FROM dbo.SPONSORSHIPTRANSACTION AS ms
WHERE ms.SPONSORSHIPCOMMITMENTID = s.SPONSORSHIPCOMMITMENTID
AND ms.TARGETSPONSORSHIPID = s.ID)
Это объединение выполняется за ~ 27 секунд.
SELECT
COUNT(*)
FROM
dbo.SPONSORSHIP AS s
INNER JOIN
dbo.SPONSORSHIPTRANSACTION AS lt ON lt.SPONSORSHIPCOMMITMENTID = s.SPONSORSHIPCOMMITMENTID
AND lt.TRANSACTIONSEQUENCE = (SELECT MAX(TRANSACTIONSEQUENCE)
FROM dbo.SPONSORSHIPTRANSACTION AS ms
WHERE ms.SPONSORSHIPCOMMITMENTID = s.SPONSORSHIPCOMMITMENTID
AND s.ID IN (ms.CONTEXTSPONSORSHIPID,
ms.TARGETSPONSORSHIPID,
ms.DECLINEDSPONSORSHIPID)
AND ms.ACTIONCODE <> 9)