Sql server 在MS SQL Server中为大型查询创建索引

Sql server 在MS SQL Server中为大型查询创建索引,sql-server,tsql,Sql Server,Tsql,我有以下巨大的要求: SELECT TOP (100000) B.UserId AS [UserId], B.ProfileId AS [ProfileId] FROM tBounce AS B JOIN tBounceType AS BT ON BT.Id = B.BounceTypeId WHERE BT.IsHard = 1 AND B.IsProcessedByAutoUnsubscriber = 0 GROUP BY B.UserId,

我有以下巨大的要求:

SELECT TOP (100000) 
    B.UserId AS [UserId], B.ProfileId AS [ProfileId] 
FROM 
    tBounce AS B
JOIN
    tBounceType AS BT ON BT.Id = B.BounceTypeId
WHERE
    BT.IsHard = 1 AND B.IsProcessedByAutoUnsubscriber = 0
GROUP BY 
    B.UserId, B.ProfileId
HAVING
    count(*) > 2

tBounce
表包含数十亿条记录,我需要在索引中包括哪些列?是否还需要添加分组字段?

您应该在其中有一个ORDER BY,还应该了解执行计划并将其发布在问题中执行计划有一个主要部分:,但此查询有时会非常慢。这种行为的原因可能是什么?如果is有时速度较慢,则很可能会锁定。尝试使用(nolock)您的执行计划已经对要使用的索引提出了建议。我强烈建议您使用
IsProcessedByAutoUnsubscriber=0
向索引添加一个过滤器。我来这里是想建议一个过滤索引,但被@ZoffDino击败了。唯一需要注意的是,符合where子句的行的百分比应该很小,否则就不值得为了从中获得的好处而维护索引。