sql - 在存储过程中使用 View 而不是表?

标签 sql database database-design stored-procedures views

查询 View 而不是存储过程中的原始表是一个好习惯吗? (即使 View 没有提供任何不同的数据)

我一直认为这可能是个好主意,因为它是一个额外的抽象层,并且类似于在类函数中使用属性而不是成员变量。

但现在我正在查看由 ASP.NET Membership Provider 创建的存储过程,它们总是直接查询表。

我知道使用 View 不能方便地插入数据,但是如果存储过程只是查询数据,你还应该直接使用表吗?如果是,主要原因是什么? (性能?)

最佳答案

View 只是一个扩展为外部查询的宏。

如果您的 View 包含多个连接,那么当您连接到其他 View 时,当您在存储过程的 SQL 中实际看到 3 个 JOIN 时,您突然有了 20 或 30 种 JOIN 方式。您还会发现每个查询都是不同的:为什么要为每个查询连接相同的 20 或 30 个表?

通常,除非 View 被索引/物化并且优化器可以使用它,否则没有任何好处。

诸如在被 View 屏蔽的单个表上进行计算的想法应该在计算列中:为什么要继续计算它?对于 View 中多个表的计算,应该对其进行索引。

使用存储过程意味着没有基表访问(所有权链)。

View 有很好的用途,可以避免用户直接访问表,或屏蔽模式更改,或提供一些基本的安全性(例如基于 SUSER_SNAME),但不是为了性能或理念

关于sql - 在存储过程中使用 View 而不是表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4907711/

相关文章:

mysql - 选择不包含其他表引用的记录

database-design - 多语言数据库的架构

java - Swing app.only 在 JTextArea 中显示一条记录

sql - 可以组合日期和时间并存储为日期时间格式

java - 尝试将数据添加到数据库

database - 关于使用memcachedb做大规模key-value存储的看法

database-design - 图形和版本控制

sql - Oracle查询计划效率问题

php - SQL 按 ID 列表过滤

mysql - 关系代数到 SQL