SQL Server通过 View 查询和通过基表查询得到不同的执行计划

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

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

谢谢。

最佳答案

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

您可以使用以下方式刷新 View :

sp_refreshview [@viewname = ] 'viewname'

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

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

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

关于SQL Server通过 View 查询和通过基表查询得到不同的执行计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10830910/

相关文章:

mysql - SQL 计数功能不适用于连接查询

php - 多对多关系数据库的复合FK表

c# - 批量更新从更新中返回了意外的行数;实际行数 : 0; expected: 1

SQL Server 2005 : How to drop selected tables, 与所有相关对象

tsql - 从 SQL Server SEQUENCE 获取当前值

sql - 如何在SQL Server 2005中设置数据库的默认架构?

sql-server - 在 SQL Server 中插入后获取 ID

php - PHP,MySQL,Cron Job-在大型表中维护当前/实时数据的有效方法?

sql - 在 MS SQL Server 2008 下的 T-SQL 中,参数 *value* 前面的 '@' 是什么意思?

sql - SQL Server 中的“<>”不返回 NULL 值行