【发布时间】:2014-07-27 13:37:23
【问题描述】:
我使用的是 SQL Server 2012。
当我运行这个查询时...
select
count(*)
from
MembershipStatusHistory msh
join
gym.Account a on msh.AccountID = a.AccountID
join
gym.MembershipType mt on a.MembershipTypeID = mt.MembershipTypeID
join
MemberTypeGroups mtg on mt.MemberTypeGroupID = mtg.MemberTypeGroupID
where
mtg.MemberTypeGroupID IN (1,2)
and msh.NewMembershipStatus = 'Cancelled'
and year(msh.ChangeDate) = year(getdate())
and month(msh.ChangeDate) = month(getdate())
and day(msh.ChangeDate) = day(getdate())
...它几乎立即返回。伟大的。现在,当我像这样运行完全相同的查询时:
declare @CancellationsToday int
SET @CancellationsToday = (
select
count(*)
from MembershipStatusHistory msh
join gym.Account a
on msh.AccountID = a.AccountID
join gym.MembershipType mt
on a.MembershipTypeID = mt.MembershipTypeID
join MemberTypeGroups mtg
on mt.MemberTypeGroupID = mtg.MemberTypeGroupID
where mtg.MemberTypeGroupID IN (1,2)
and msh.NewMembershipStatus = 'Cancelled'
and year(msh.ChangeDate) = year(getdate())
and month(msh.ChangeDate) = month(getdate())
and day(msh.ChangeDate) = day(getdate())
)
...返回需要 1.5 分钟。始终如一。
这到底是怎么回事?我必须使用一个变量,因为我需要稍后在我的存储过程中对结果求和。我将其他查询的结果存储在同一个过程中,它们很快。我被难住了。
以下是 SLOW 查询的执行计划:
下面是 FAST 查询的执行计划:
说实话,我不知道这些执行计划是什么意思,或者我需要更正什么。
【问题讨论】:
标签: sql sql-server sql-server-2012