我目前正在开展维护是一个主要问题的项目。因此,首席设计师自然不希望重复任何不必要的代码。
我们有一些查询数据的复杂视图。不,我的任务是制作另一个复杂的视图,但我的指示是从其他视图查询。在注意到生产数据副本出现了一些严重的速度问题之后,我注意到我的View正在调用一个View,它调用了另一个View,它调用了另一个View! (即:查看引用视图B引用视图C引用视图D - 在我的例子中,每个视图都是对同一数据库中所有表的查询)
虽然我知道关于视图和表格的可互换性原则(即:实际关系和虚拟关系之间没有区别),但我可以期待性能问题吗?我应该制作一个不引用另一个视图的视图吗?
答案 0 :(得分:2)
视图在执行之前已展开。任何级别的嵌套视图都不应该有性能损失。
如果性能下降,可能是因为嵌套视图的工作量超出了您的要求。 SQL Server目前只能进行优化。特别是查询提示或强制排序操作(如select top 100 percent ...
)可能会使嵌套查询变慢。
我的建议是使用最易读,最易维护的替代方案。如果遇到性能问题,可以考虑优化一些视图!