我正在尝试使用SELECT
运行LEFT JOIN
查询。我在第二张桌子上找到了COUNT
(LEFT JOIN
右侧的表格)。当第二个表上的记录数量增加时,此过程会稍微变重。我的第一张和第二张桌子有一对多的关系。第二个表的CampaignId
列是第一个表Id
的外键。这是我的查询的简化版本:
SELECT a.[Id]
,a.CampaignId
,a.[Inserted] AS 'Date'
,COUNT(b.Id) AS 'Received'
FROM [CampaignRun] AS a
LEFT JOIN [CampaignRecipient] AS b
ON a.Id = b.CampaignRunId
GROUP BY
a.[Id], a.CampaignId,a.[Inserted]
HAVING
a.CampaignId = 637
ORDER BY
a.[Inserted] DESC
数字637
只是一个记录的示例。
有没有办法让这个查询运行得更快?
答案 0 :(得分:1)
使用子选择来计算Received:
SELECT a.[Id]
,a.CampaignId
,a.[Inserted] AS 'Date'
, (SELECT COUNT(*) FROM [CampaignRecipient] AS b
WHERE a.Id = b.CampaignRunId ) AS 'Received'
FROM [CampaignRun] AS a
WHERE a.CampaignId = 637
ORDER BY a.[Inserted] DESC
答案 1 :(得分:1)
您在此处没有HAVING
条款,您可以转到WHERE
条款
SELECT a.[Id]
,a.CampaignId
,a.[Inserted] AS 'Date'
,COUNT(b.Id) AS 'Received'
FROM [CampaignRun] AS a
LEFT JOIN [CampaignRecipient] AS b
ON a.Id = b.CampaignRunId
WHERE a.CampaignId = 637
GROUP BY a.[Id], a.CampaignId,a.[Inserted]
ORDER BY a.[Inserted] DESC
还要确保在[CampaignRecipient]
列的CampaignRunId
表中包含外键索引。这被认为是一种很好的做法。