为什么SQL Server 2005中的查询会更快,仅仅因为它位于视图中?

为什么SQL Server 2005中的查询会更快,仅仅因为它位于视图中?,sql,sql-server,performance,view,Sql,Sql Server,Performance,View,我们有一个大的SELECT查询,运行大约需要30秒。我被告知,当放置在视图中时,运行不到5秒 我的假设是,SQL Server会为不变的查询缓存查询计划,那么为什么要在这里大幅提高性能呢 要明确的是,这实际上只是采取以下措施的一种情况: select * from table /* Lots of joins, where clauses */ 并将其作为一种观点: create view myfirstview as select * from table /* Lots of joins,

我们有一个大的SELECT查询,运行大约需要30秒。我被告知,当放置在视图中时,运行不到5秒

我的假设是,SQL Server会为不变的查询缓存查询计划,那么为什么要在这里大幅提高性能呢

要明确的是,这实际上只是采取以下措施的一种情况:

select * from table /* Lots of joins, where clauses */
并将其作为一种观点:

create view myfirstview as select * from table /* Lots of joins, most of the where clauses */
select * from myfirstview where /* The rest of the where clauses (i.e. the ones that can change) */

也许告诉你的是。是标准术语

也许告诉你的是。是标准术语

否,未索引/具体化的视图是宏观视图


不管你被告知什么,都没有特殊的视图魔法。

不,没有索引/具体化的视图是一个宏


尽管有人告诉过你,但没有什么特别的景观魔术。

有人告诉我。。。。。你自己检查并核实过吗

老实说,我会很惊讶。。。。常规视图只是存储的SQL语句—没有缓存,什么都没有

除非他们讨论的是索引视图物化视图,它最终实际上是一个系统维护的表,否则数据存储在磁盘上,就像普通表一样


这不再是一个真正的视图-即使它仍然被称为视图;-那些带有聚集索引的索引视图可以非常快,因为它们像存储表一样存储组成视图的实际数据。

我听说。。。。。你自己检查并核实过吗

老实说,我会很惊讶。。。。常规视图只是存储的SQL语句—没有缓存,什么都没有

除非他们讨论的是索引视图物化视图,它最终实际上是一个系统维护的表,否则数据存储在磁盘上,就像普通表一样


这不再是一个真正的视图-即使它仍然被称为视图;-那些带有聚集索引的索引视图可能非常快,因为它们像存储表一样存储构成视图的实际数据。

我敢打赌,告诉您这一点的人做了如下测试:

首先,选择本身所需的时间 下一步,查看需要多长时间

问题是SELECT导致SQLServer从磁盘读取大量数据。一旦进入内存,查询将执行得更快。如果只运行了两次SELECT,或者颠倒了上面两个查询的顺序,您会注意到类似的改进

要进行真正的苹果对苹果比较,请在每次查询之前运行以下命令:

CHECKPOINT
DBCC DROPCLEANBUFFERS

我敢打赌,告诉你这件事的人做了类似这样的测试:

首先,选择本身所需的时间 下一步,查看需要多长时间

问题是SELECT导致SQLServer从磁盘读取大量数据。一旦进入内存,查询将执行得更快。如果只运行了两次SELECT,或者颠倒了上面两个查询的顺序,您会注意到类似的改进

要进行真正的苹果对苹果比较,请在每次查询之前运行以下命令:

CHECKPOINT
DBCC DROPCLEANBUFFERS

@马克:你的评论应该是一个答案。不,我还没有检查过自己——是别人告诉我的,我只是不明白。我想知道如果X,Y和Z都在的话,会不会有一个是的,完全可能发生的。听起来可能不是。@marc_s:你的评论应该是一个答案。不,我还没有检查过自己——是别人告诉我的,我只是不明白。我想知道如果X,Y和Z都在的话,会不会有一个是的,完全可能发生的。听起来可能不是。他们是一样的,不是吗?这不是SQL Server中的默认值哈哈,我正要告诉你,看看gbn的答案,他知道我的意思,然后,我看到了你的答案。好的,我也知道视图的默认设置是宏扩展,关键系统遵循的规则是,不使用的东西不付费,RDBMS也不例外。任何有自尊心的DBA或应用程序开发人员都知道索引/物化视图可能会导致死锁,因此他们不会假定索引/物化视图是默认视图,他们是同一件事,不是吗?这不是SQL Server中的默认值哈哈,我正要告诉你,看看gbn的答案,他知道我的意思,然后,我看到了你的答案。好的,我也知道视图的默认设置是宏扩展,关键系统遵循的规则是,不使用的东西不付费,RDBMS也不例外。任何有自尊心的DBA或应用程序开发人员都知道索引/物化视图可能会导致死锁,因此他们不会假定索引/物化视图是默认视图,只是要补充一点,它也取决于版本。EE将在优化过程中自动考虑索引视图。她不会。要使SE和lower使用实际的索引视图,查询必须添加WITH NOEXPAND提示 也取决于版本。EE将在优化过程中自动考虑索引视图。她不会。要使SE和lower使用实际的索引视图,查询必须添加WITH NOEXPAND提示。