sql-使用什么? 查看或临时标签

我在决定使用视图还是临时表时遇到问题。

我有一个从程序调用的存储过程。 在该SP中,我将长时间查询的结果存储在临时表中,命名列,然后对该表进行另一个查询,将结果存储在标签或gridview或其他内容中,然后删除临时表。 我还可以将查询结果存储在一个视图中并在该视图上进行查询。 所以什么更好,或者在什么情况下我必须使用“视图/温度表”。

根据我的研究,视图具有以下优点:安全性,简单性和列名规范。 我的临时表也满足了所有这些要求(根据我的观点)。

ruedi asked 2020-08-12T00:40:53Z
5个解决方案
44 votes

如果查询为“长”,并且您要访问多个查询的结果,则使用临时表是更好的选择。

通常,视图只是declare @t table . . .语句的捷径。 如果不表示结果已经运行和处理过。 如果使用视图,则每次使用时都需要重新生成结果。 尽管视图的后续运行可能更有效(例如,由于视图查询所使用的页面在缓存中),但临时表实际上存储了结果。

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

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

Gordon Linoff answered 2020-08-12T00:41:13Z
9 votes

要看

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

所以您想使用更多的处理或更多的存储空间吗?

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

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

KM. answered 2020-08-12T00:41:51Z
3 votes

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

同样,在某些情况下,视图可能是一个更好的选择(如在多个数据库服务器中,如果处理不当的话),但这取决于您要执行的操作。

Jayant Shelke answered 2020-08-12T00:42:17Z
1 votes

我还要提及一下临时表,

您不能在同一查询中多次引用TEMPORARY表。

对于您要在其上使用自我联接的情况,这使临时表不方便。

Moyuan Huang answered 2020-08-12T00:42:45Z
0 votes

通常,当我想多次引用存储过程中的同一张表时,我会使用一个临时表,而当我想在不同存储过程中使用该表时,则使用一个视图。

视图不会持久保留数据(原则上):每次引用视图时,SQL都会使用视图中的逻辑来访问原始表。 因此,您不想在视图上的视图上构建视图,也不想对逻辑复杂的视图使用多个引用。

answered 2020-08-12T00:43:10Z
translate from https://stackoverflow.com:/questions/16897323/what-to-use-view-or-temporary-table