在SQL中使用视图

在SQL中使用视图,sql,views,Sql,Views,我有一个从基表创建的视图。这个视图基本上是表的精确副本,没有任何过滤条件,它包含表的所有列和记录 在我的应用程序或存储过程中,使用直接复制表而不是直接复制表的视图是否有任何优势。在这种情况下,视图和表之间没有区别。视图不是表的副本,而是类似于存储的select语句 从性能方面来看,这种方法可能存在严重的缺点 我建议尽可能避免使用视图。不 除索引视图外,视图仅在使SQL更易于读取时才真正有用-执行包含视图的查询本质上与执行复制并粘贴到查询中的视图定义的查询相同 我不鼓励以这种方式使用复杂视图,因为

我有一个从基表创建的视图。这个视图基本上是表的精确副本,没有任何过滤条件,它包含表的所有列和记录


在我的应用程序或存储过程中,使用直接复制表而不是直接复制表的视图是否有任何优势。

在这种情况下,视图和表之间没有区别。视图不是表的副本,而是类似于存储的select语句

从性能方面来看,这种方法可能存在严重的缺点

我建议尽可能避免使用视图。

除索引视图外,视图仅在使SQL更易于读取时才真正有用-执行包含视图的查询本质上与执行复制并粘贴到查询中的视图定义的查询相同


我不鼓励以这种方式使用复杂视图,因为尽管它使查询看起来更干净,但它使诊断过程更痛苦,因为您需要查找所有视图以了解原始查询的作用,但您需要注意视图的工作方式有点不同,因为你在DB端有一些过度的杀伤力

视图的工作方式是执行Select*,然后对添加到视图中的列进行自我筛选

除非有一些严重的安全问题,否则我真的很厌倦使用视图

方法是创建一个直接从表中获取数据的存储过程。这样,就可以获得索引的最大值以及所有这些


干杯

可能没有直接的目的或好处,但它确实为您提供了一个抽象点,可以在以后提供基于架构或安全性的好处

这种观点实质上可以被视为一种数据契约,它在未来允许底层结构在某种程度上灵活,而不需要外界意识到这一点


在安全性方面,将来可能会插入where子句,这将开始为您提供行级筛选/安全性,因为直接访问表会阻止将来的任何此类移动。

根据您的观点,视图允许您在SQL server中存储业务逻辑,而不是在代码中。如果您需要在不重新编译代码的情况下轻松地更改业务,那么修改视图是一种快速而简单的方法


我个人更喜欢在代码中定义应用程序的业务逻辑,但是:

视图可以被认为是物理层表上的一个逻辑层,在这种情况下,该层非常薄,其价值可能会受到质疑。然而,随着时间的推移,情况可能并非如此。使用视图访问表几乎不需要任何成本,但可以将代码与物理模型的可能更改隔离开来。

这种方法在性能和可维护性方面会产生成本。ORM层或存储过程中的抽象应该足以将代码库与物理模型的更改隔离开来。@Ian:一切都是有代价的;问题是它是否被利益所压倒。我没有读过任何可信的研究,认为观点是绩效的痛点。当然,不恰当地使用API会让服务器屈服——但这绝不是API的错。正如引用文章的评论中所指出的,错误信息多于事实,我同意海报上的观点,即应该删除该文章。猜测和此处说不能代替文章所提供的经验证据。如果这些答案是有用的,请考虑将其中一个标记为接受。这被认为是一种良好的礼貌,也鼓励其他人在将来回答你的问题