0

我在 View 中遇到问题。我不能在View这里向您展示确切的信息,因为这将违反开发团队的政策。

以下是 View 的格式:

Create View View_Name as
Select A,B,C,D,E,F
  from  (
    Select  T.A,T.B,T.C,T.D,
        dbo.Function_1(T1.A,T2.B) E,
        dbo.Function_2(T1.A,T2.B) F,
        dbo.Function_3(T1.A,T2.B) G,
      from  (
        Select  T1.A,T1.B,T2.C,T2.D
          from  Table1 T1 
          join  Table2 T2
            on  Some_Condition_1
             .
             .
             .
         where  Some_Where_Clause
         group  by T1.A,T1.B,T2.C,T2.D
        ) T
     where  Some_Where_Condition_ForThis_InnerQuery
    ) T_Out
 where Some_Where_Conditions_For_OuterQuery

此视图需要 5 分钟才能执行。每个表中有 40,000 条记录。

但是,当我functions用它们各自替换时,Queries执行速度非常快。执行几乎不需要 2 秒。


我不想重新格式化我的视图,但我想知道为什么
两种情况下的执行时间不同?
4

1 回答 1

0

我认为问题在于 SQL 服务器无法优化函数调用,它必须为每一行调用它。对于子查询优化器可以做它的工作。

有很多讨论:

为什么 UDF 比子查询慢得多?

性能、用户定义函数或子查询

于 2013-07-25T07:02:29.010 回答