如果所有 SQL 都在做 SELECT,那么使用视图与 SPROC 是不是有优势

Posted

技术标签:

【中文标题】如果所有 SQL 都在做 SELECT,那么使用视图与 SPROC 是不是有优势【英文标题】:If all SQL is doing is SELECT, is there an advantage to using a view vs a SPROC如果所有 SQL 都在做 SELECT,那么使用视图与 SPROC 是否有优势 【发布时间】:2012-09-12 18:05:58 【问题描述】:

如果所有 SQL 都在做 SELECT,那么使用视图与 SPROC 相比是否有优势。 从我的角度来看,它纯粹是组织性的,但我想知道当 SPROC 所做的只是 SELECT 并且没有写入数据库时​​,是否有充分的理由使用视图。 我使用的是 Sql Server 2008,但这可能适用于其他 SQL Server 产品

【问题讨论】:

【参考方案1】:

视图旨在抽象出基础表的详细信息,并为数据提供一个窗口,以您希望的方式显示。

存储过程实现特定任务,并且可以选择获取任务执行期间使用的参数。

如果您想通过从用户那里获取参数来运行特定任务,那么您可以创建一个存储过程。

如果您只想以给定方式公开数据并在需要时将进一步过滤留给用户,您可以创建一个视图。

【讨论】:

-1:您可以将 where 子句传递给视图:select * from v_your_view where your_column = 1 @DanielHilgarth,这就是我所说的“用户提供过滤器”的意思,在存储过程的情况下,您已经决定过滤哪些列并且用户只提供值对于那些过滤器。 这种说法很含糊。也许你可以编辑它?这样我就可以删除反对票。 @DanielHilgarth,编辑了不明确的部分。【参考方案2】:

除了为特定角色封装特定数据的安全优势之外,还有能够创建index on the view 的优势。

以下是一些特定的性能优势,来自 MSDN 链接:

可以预先计算聚合并将其存储在索引中,以最大限度地减少查询执行期间昂贵的计算。 可以预先加入表并存储生成的数据集。 可以存储连接或聚合的组合。

【讨论】:

以上是关于如果所有 SQL 都在做 SELECT,那么使用视图与 SPROC 是不是有优势的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver怎么查看表的内容

sqlserver怎么查看表的内容

oracle 查看视图

SQLServer之查询当前服务器下所有目录视图表

无法通过从下拉选择转换的选定字段代码使用 SQL 访问全局视图表

sql中select的作用是