【问题标题】:SQL Server query through view and query through base tables get different execution planSQL Server通过视图查询和通过基表查询得到不同的执行计划
【发布时间】:2012-05-31 09:30:53
【问题描述】:

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    sp_refreshview [ @viewname = ] 'viewname'

    或者完全重建视图并再次运行它以生成新的执行计划,但是您以后可能会遇到同样的性能问题。本文更详细地描述了可能发生的情况:

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

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

    【讨论】:

    • 谁反对这个答案?我记得昨晚是 2 票,现在只有 1 票。
    • @Yousui 很高兴听到你整理好了 :-)
    猜你喜欢
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多