SQL Server查询通过视图和查询通过基表获得不同的执行计划

时间:2012-05-31 09:30:54

标签: sql sql-server tsql view sql-execution-plan

我有一个基本连接某些表的视图,视图上没有索引。当我查询视图(与另一个表连接)时,性能很差,大约需要10分钟。当我从视图中提取基表并使用"另一个表"加入时,大约需要20秒。使用视图或使用基表的逻辑完全相同。我查了一下,他们确实得到了不同的执行计划。任何想法为什么会发生这种情况?

感谢。

1 个答案:

答案 0 :(得分:3)

SQL Server可能正在使用缓存的执行计划(基于您第一次从视图中选择某些内容。该表的大小可能已经增大,并且不再使用最有效的计划,因此性能较慢)。

您可以使用以下方式刷新视图:

sp_refreshview [ @viewname = ] 'viewname'

或者完全重建视图并再次运行以生成新的执行计划,但是稍后您可能会遇到相同的性能问题。本文将详细介绍可能发生的情况:

http://www.sql-server-performance.com/2007/views-general/

http://technet.microsoft.com/en-us/library/ms187821.aspx