【发布时间】:2020-06-29 03:35:29
【问题描述】:
我正在努力弄清楚下面显示的 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)
【问题讨论】:
标签: sql-server performance tsql indexing inner-join