2013-06-03 39 views
27

我有一个问题,以决定是否使用视图或临时表。使用什么?查看或临时表

我有一个存储过程,我从程序调用。在该SP中,将长查询的结果存储在临时表中,命名列并对该表进行另一个查询将结果存储在标签或网格视图中或其他内容中,然后删除临时表。我也可以将查询结果存储在视图中并对该视图进行查询。那么,我有什么更好的或者在什么情况下使用VIEW/Temp Table。

根据我的研究,一个视图具有以下优点:安全性,简单性和列名称规范。我的临时桌也满足了这一切(根据我的观点)。

+1

除非你陈述自己的目标,并根据他们对你的重要性对他们进行排名,否则这实在太笼统了。 – Tim

+0

这个问题只有可能的答案是:你必须尝试两种方法,看看哪一个更好。 –

回答

28

如果查询是“long”,并且您正在访问多个查询的结果,那么临时表是更好的选择。

一般来说,一个视图只是select声明的捷径。如果并不意味着结果会被运行和处理。如果您使用视图,则每次使用结果都需要重新生成。尽管视图的后续运行可能更有效(比如说,因为视图查询使用的页面在缓存中),但临时表实际上存储结果。

在SQL Server中,您也可以使用表变量(declare @t table . . .)。

在单个存储过程中使用临时表(或表变量)在安全性,简单性和列名方面似乎影响不大。安全性将通过访问存储过程来处理。任何解决方案都需要列名称。没有更多的信息,简单性很难判断,但没有什么特别复杂的。

6

取决于

一个视图必须复制你的“长查询”每次运行时的处理,而一个临时表中存储的结果。

那么你想使用更多的处理或更多的存储?

你可以存储一些视图值(持久索引),这可以帮助处理,但是你没有提供足够的信息来真正探索这个。

如果您正在讨论的是在单个过程调用中只存储用于使用的数据,那么临时表是一种可行的方法。

2

这实际上是一个情景和操作特定的问题和答案可能会有所不同,这取决于场景的要求。 但是,我想补充的一点是,如果您使用视图来存储复杂查询的结果,而这些查询又反过来用于GridView的操作,那么对复杂操作执行更新操作可能会很麻烦观点。相反,临时表可以满足这一点。

此外,还有场景的情况下,视图可能是一个更好的选择[如果不正确处理多个数据库服务器],但它取决于你想要做什么。