我有一个问题需要决定是使用视图还是临时表。
我有一个存储过程,我从程序中调用。在该SP中,我将长查询的结果存储在一个临时表中,命名列并在该表上进行其他查询,将结果存储在标签或网格视图中,然后删除临时表。我也可以将查询结果存储在视图中,并对该视图进行查询。那么哪个更好,或者在什么情况下必须使用VIEW/ Temp Table。
根据我的研究,视图具有以下优点:安全性、简单性和列名称规范。我的临时表也符合这一点(依据我的观点)。
我有一个问题需要决定是使用视图还是临时表。
我有一个存储过程,我从程序中调用。在该SP中,我将长查询的结果存储在一个临时表中,命名列并在该表上进行其他查询,将结果存储在标签或网格视图中,然后删除临时表。我也可以将查询结果存储在视图中,并对该视图进行查询。那么哪个更好,或者在什么情况下必须使用VIEW/ Temp Table。
根据我的研究,视图具有以下优点:安全性、简单性和列名称规范。我的临时表也符合这一点(依据我的观点)。
depends
一个视图每次运行时都必须复制您的“长查询”的处理过程,而临时表则存储结果。
那么你想使用更多的处理还是更多的存储空间呢?
您可以存储一些视图值(持久索引),这可能有助于处理,但您没有提供足够的信息来真正探索这一点。
如果您只是想在单个过程调用中存储数据,则应使用临时表。
我想补充一下关于临时表的内容:
在同一个查询中,您不能多次引用临时表。
这使得临时表在需要在其上进行自连接的情况下不太方便。
通常我会在存储过程中多次引用同一张表时使用临时表,而在不同的存储过程中使用表时则会使用视图。
从原理上讲,视图不会保留数据:每次引用视图时,SQL都会使用视图的逻辑来访问原始表。因此,不要在视图上构建视图或多次引用具有复杂逻辑的视图。
TEMPORARY表只在当前会话中可见,并且在会话关闭时会自动删除。如果您需要反复获得复杂查询的相同结果,则TEMPORARY表可以通过存储中间结果来提高性能。
VIEW在多个会话中保留。在底层就像一个查询,每次访问视图时,SQL服务器都会从基本表重新生成结果。虽然VIEW在这方面较慢,但VIEW确保所获得的结果是最新的。