3

我目前正在从事一个维护是主要问题的项目。因此,首席设计师自然不希望重复任何不必要的代码。

我们有一些查询数据的复杂视图。不,我的任务是制作另一个复杂的视图,但我的指示是从其他视图中查询。在注意到生产数据副本存在一些严重的速度问题后,我注意到我的视图正在调用一个视图,该视图调用了另一个视图,而另一个视图又调用了另一个视图!(即:视图 A 引用视图 B,视图 B 引用视图 C,视图 C 引用视图 D - 在我的情况下,每个视图都是对同一数据库中所有表的查询)

虽然我知道关于视图和表的可互换性原则(即:实际关系和虚拟关系之间没有区别),但我可以期待性能问题吗?我应该创建一个不引用另一个视图的视图吗?

4

1 回答 1

2

视图在执行之前被展开。任何级别的嵌套视图都不应该有性能损失。

如果存在性能损失,可能是因为嵌套视图所做的工作超出了您的要求。SQL Server 只能优化到此为止。特别是查询提示或强制排序操作select top 100 percent ...可能会使嵌套查询变慢。

我的建议是使用最易读、最易维护的替代方案。如果您遇到性能问题,那么考虑优化一些视图就足够早了!

于 2013-09-28T17:47:08.430 回答