【问题标题】:Benefits to views in stored procedures存储过程中视图的好处
【发布时间】:2017-09-18 05:58:53
【问题描述】:

我尝试了不同的搜索方式,但没有找到明确的答案。 This question 几乎回答了我的问题,但并不完全。

除了明显的可读性差异之外,在存储过程中使用视图还有什么好处:

SELECT 
    * 
FROM 
    view1 
WHERE 
    view1.fdate > @start AND 
    view1.fdate <= @end 

...是否使用链表列表?

SELECT 
    * 
FROM 
    table1 
    INNER JOIN 
    table2 
        ON  table1.pid = table2.fid 
    INNER JOIN 
    table3 
        ON  table1.pid = table3.fid 
WHERE 
    table1.fdate > @start AND 
    table1.fdate <= @end 

【问题讨论】:

  • 好吧,有些视图可能会被索引,所以在某些情况下,索引视图可能有助于提高性能。除此之外,我怀疑是否有任何真正的区别。但是,我想 DBA 专家可能会提出更好的答案,所以我将其作为评论留下。
  • 感谢您的意见,@ZoharPeled。我确实注意到了这一点,但是表级索引不是同样有用吗(如果表首先被正确索引)?
  • @Paul 索引视图可以创建表索引无法匹配的索引,例如。索引视图可以包含聚合。

标签: sql-server stored-procedures view sql-view


【解决方案1】:

不仅仅与您的应用和您有关。

想想企业数据库,有数十个不同的应用程序访问相同的数据,以及数百个人出于业务目的查询数据。您如何向众多人中的每一个人解释如何重构您的高度规范化的数据?哪个查找字段映射到哪个表?他们是如何加入的?以及如何授予对数据的只读访问权限,确保某些敏感字段不可访问,而无需重复自己?

您,DBA,创建 VIEW。他们将数据非规范化为易于处理的业务人员、许多应用程序和报告的关系。您授予对视图的选择权限,而无需授予对基础表的访问权限以隐藏敏感的私有字段。有时您编写视图是因为您厌倦了在午夜被调用,因为数据库已“关闭”,因为来自会计的 Johnny 正在运行笛卡尔连接。

【讨论】:

  • 约翰尼不过是个麻烦事... :-)
  • 老实说,我没有想到这一点(我是一个自私的开发人员,毕竟,不是真正的 DBA!)。这是有用的信息 - 谢谢。
【解决方案2】:

没有区别。两种情况下的查询计划都是相同的。查询优化器可以使用索引视图,即使您没有显式使用它(在情况 2 中)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2014-09-23
    • 2017-08-18
    相关资源
    最近更新 更多