有没有办法在索引扫描中转换此keylookup?

时间:2014-04-10 14:18:47

标签: sql sql-server indexing sql-execution-plan

我不是SQL专家(我尝试完成工作 - 显然越快越好),我不知道我给你的信息是否足以解决问题问题。我正在使用SQL Server,SQL Management studio。

在这种情况下,我在" a"上有一个连接查询。表和" o"表

这两个表连接在一个列上(让我们说o.customer = a.customer)但是它们分组在另一个列(o.opportunity)上,该列不在表a中。

sum(case
when a.ActivityTypeCode=4202 and a.actualend>o.createdon
then 1
else 0 end)
as Feature_Name

这是创建密钥查找的查询部分。

查找的搜索谓词说明了这一点:

Seek Keys[1]: Prefix: [MSCRMBauerMedia_MSCRM].[dbo].[ActivityPointerBase].ActivityId =
Scalar Operator([MSCRMBauerMedia_MSCRM].[dbo].[ActivityPointerBase].[ActivityId] as [a].[ActivityId])

我没有得到谓词告诉我的内容以及我如何将其作为索引搜索或索引扫描。我对此查询中涉及的所有变量都有索引:在单个列上并覆盖所有变量的索引。

有任何想法或建议吗?

谢谢。

编辑:这是查询。附上执行计划。

select tp0.* from
(
select
 o.opportunityid
,(sum(
case when a.ActivityTypeCode=4202 and a.actualend>o.createdon
then 1
else 0
end
))  as Phone_calls
,(sum(
case when a.ActivityTypeCode=4210 and a.actualend>o.createdon
then 1
else 0
end
))  as Emails
from OpportunityBase as o
left join ActivityPointerBase as a
on o.customerid = a.regardingobjectid
where o.actualclosedate is null and a.RegardingObjectTypeCode=1
group by 
o.opportunityid
 ) as tp0

http://imgur.com/J8eXQGd

1 个答案:

答案 0 :(得分:0)

实际上,查看查询时,左连接不是必需的。请尝试使用内部联接。