【发布时间】:2014-01-21 07:57:11
【问题描述】:
我正在尝试在 SQL Server 2008 中运行查询,但当我更改其中一个变量 (SourceID) 的值时,它的运行速度非常慢。当SourceID 设置为另一个可用的 ID 时,下面的代码可以正常工作,但在代码中它只是挂起......如果我让它挂了几个小时!
email、dupe 和 MyMystery 列都已编入索引...有什么想法吗?
WITH rmdup as (
SELECT act.Email
, act.FirstName
, act.LastName
, act.SourceID SID
, ac.ID CID
, ROW_NUMBER() OVER (PARTITION BY act.Email ORDER BY act.Email DESC,act.dateadded DESC) RN
from a_customer_test act
inner join
a_customer ac
on act.Email = ac.email
and act.sourceID = ac.sourceID
where act.sourceID in (409)
and dupe = 0
and mymystrey = 0
and act.Email not in (select cemail as email
from a_unsub
union
select email as email
from a_unsubscribe)
)
select REPLACE(Email, ',', '.') as Email
, FirstName
, LastName
, SID
, CID
from rmdup
where RN=1
ORDER BY
Email DESC
顺便说一句,我无法运行“显示估计执行计划”,因为我没有权限并收到以下错误...我的生活故事!
消息 262,第 14 级,状态 4,第 1 行
SHOWPLAN 权限在数据库中被拒绝
【问题讨论】:
-
您能否准确列出您在 a_customer_test 和 a_customer_test 上有哪些指标?此外,我敢肯定,即使您将数据库复制到您的开发箱,您也需要该执行计划!
-
a_customer_test 中有多少行? SourceId 上有索引吗?
-
嗨,Ian,SourceID 未编入索引。
-
没有看到计划是非常困难的,但是两个表上的 Email 和 SourceID 的索引可能会有所帮助
-
我不知道a_unsubscribe和a_unsub的大小,但是你可以使用UNION ALL子句代替UNION(UNION使用更多的资源,因为它需要找到不同的值)
标签: sql sql-server performance sql-server-2008 tsql