我只是想知道通过首先在视图中创建查询来编写查询是否正确。
有什么建议吗?
答案 0 :(得分:3)
视图是一个宏,并且是expanded。
视图之上的视图只是意味着更多工作可以让优化人员解开下面的复杂性。
答案 1 :(得分:0)
查询视图通常没问题,因为sql server optimiser不容易被愚弄。但是,不要在视图中使用标量函数,否则会出现性能问题。
答案 2 :(得分:0)
这取决于你在视图中做了什么,以及你打算用它们做什么。
创建视图,然后将它们叠加在一起(通过引用另一个视图中的视图)通常不是一个好主意。在视图中使用ORDER BY也是一般的禁忌,因为如果您加入视图 - 顺序依次执行,但不需要它。
答案 3 :(得分:0)
在一天结束时,视图只是一个子查询,所以它真的没什么大不了的。
SELECT *
FROM (
SELECT *
FROM myTable
WHERE a = 2
) a
与
没什么不同SELECT *
FROM myView
计划得到缓存,因此您不会受到任何性能影响,并且您可以灵活地重用其他代码。
答案 4 :(得分:0)
我知道有一个school of thought表示您应该有一个每个视图的视图,并根据您的视图而不是您的表来开发代码。在这种情况下,您可以使用渐进式开发方法,并在修改表时为新代码开发新视图,而不会破坏旧代码所依赖的视图。我从来没有真正有过一个我认为会很复杂的项目,因为我不能只是更新代码,所以我从来没有使用过这种方法。
至于在视图中编写查询,我可以使用一种方案来执行此操作。但是,它们可能是我对LINQ的使用所特有的,所以请谨慎使用它。如果我有一个需要一些复杂处理的查询并返回一个基于多个表的复合对象,我通常会编写一个存储过程或表值函数来进行查询。我发现最简单的方法是使用LINQ设计器,如果我还创建了一个视图,我可以将其拖到设计图面上,为sp / function返回的对象创建类,而不是让它自动生成一个类。如果我选择的话,它可以让我更好地控制命名该类。