3

与临时表相比,使用视图有什么优势。我知道如果数据被其他存储过程重用,你应该使用视图,但是:

  1. 在性能方面,使用视图比使用临时表更好吗?

  2. 如果视图所基于的表不断更新,那么视图仍然比临时表更好吗?

  3. 如果我必须对视图使用 where 子句,我最好使用临时表吗?

  4. 最后,使用视图或临时表的优点/缺点是什么?

4

3 回答 3

10

要辨别,问问自己是否需要重复使用这些信息:

  • 视图是一个美化的 SELECT,它主要用于方便
  • 您可以将视图实体化,即将其存储为表格,甚至对其进行索引。看到这个问题
  • 如果您不会多次重复使用该结构,请使用临时表,例如在不时运行的脚本中
  • 视图将占用空间(尤其是在具体化的情况下),并且很难维护多个视图

还要注意临时表是如何被破坏的:

  • 如果您创建一个临时表#tbl,它将在超出范围时被销毁(例如在脚本末尾)。
  • 但是,您可以创建一个临时表,如##tbl(带有两个#),连接结束时它将被销毁。
于 2013-01-21T16:40:18.863 回答
4
  1. 一般来说,是的,因为视图只是一个存储的选择,而临时表需要使用一些 tempdb。

  2. 在这一点上,它没有任何区别。视图没有持久化——它们从它们的基表返回数据。

  3. 也没有什么区别。

  4. 视图是持久化的(也就是说,选择语句的文本是持久化的)——它们为您提供了数据库之上的一层,允许您在不影响使用视图的客户端的情况下更改数据库。

于 2013-01-21T16:05:02.330 回答
1

你在混合想法

视图是封装的逻辑,仅此而已,它有助于代码重用
临时表是您保存数据的真实物理存储

你不能比较这两个,因为它们都有不同的应用程序

我一般不喜欢使用视图:)

于 2013-01-21T16:15:10.233 回答