【发布时间】:2012-11-22 20:05:50
【问题描述】:
我创建了一个查询,它在前 100 名中执行大约 2 秒。如果我创建这个确切查询的存储过程,它需要 12-13 秒才能运行。
为什么会这样?
- 元素表计数 = 2309015(指定用户 ID = 326969)
- 匹配表数 = 1290(指定用户 ID = 498)
- 站点表计数 = 71(指定用户 ID = 9)
代码
with search (elementid, siteid, title, description, site, link, addeddate)
as
(
select top(@top)
elementid,
elements.siteid, title, elements.description,
site =
case sites.description
when '' then sites.name
when null then sites.name
else sites.name + ' (' + sites.description + ')'
end,
elements.link,
elements.addeddate
from elements
left join sites on elements.siteid = sites.siteid
where title like @search and sites.userid = @userid
order by addeddate desc
)
select search.*, isnull(matches.elementid,0) as ismatch
from search
left join matches on matches.elementid = search.elementid
【问题讨论】:
-
你看过查询执行计划吗?
-
“我创建了一个查询,它在前 100 名中执行大约 2 秒。如果我创建这个精确查询的存储过程,它需要 12-13 秒才能运行”。因此,存储的过程比查询慢得多。
-
@HamletHakobyan 我不明白,sp 很慢是的...(现在查看执行计划)
-
有一个成本,它是为 elementid 指定的元素表上的聚集索引。似乎是因为内部连接....但这并不能解释为什么在存储过程中运行时它的速度如此之慢...
-
您有一些关于为什么它变慢以及如何避免这种情况的答案,请接受其中一个答案或取消删除您自己的答案并接受它。还是您需要更多答案?
标签: sql-server sql-server-2008 stored-procedures view