为此需要一个单独的优化查询

时间:2018-10-02 14:44:54

标签: sql sql-server

下面是我当前的SQL。

Insert into [dbo].[XYZ]
select col1,col2,
(select colValue from parsedData([ParameterizedValue]) where [Name] = 'Some Value') AS col3,
(select colValue from parsedData([ParameterizedValue]) where [Name] = 'Some Value') AS col4,
(select colValue from parsedData([ParameterizedValue]) where [Name] = 'Some Value') AS col5 from [dbo].[ABC]

此语句重复调用parsedData函数。并且表ABC拥有数百万条记录。

因此,存在用于保存parsedData结果的任何SQL,因此parsedData仅被调用一次,而不是多次。

2 个答案:

答案 0 :(得分:0)

您可以进行交叉申请(或外部申请)。

CROSS APPLY是相关子查询的替代方法,也可以用于“联接功能”。我没有一个很好的例子,但是这里有一些希望有用的链接:

答案 1 :(得分:0)

您可以这样做:

Insert into [dbo].[XYZ]
    select abc.col1, abc.col2, p.col3, p.col4, p.col5
    from [dbo].ABC abc outer apply
         (select max(case when name = 'value1' then colvalue end) as col3,
                 max(case when name = 'value2' then colvalue end) as col4,
                 max(case when name = 'value3' then colvalue end) as col5             
          from parsedData(abc.ParameterizedValue) p
         ) p;

这应该为您节省对同一数据的多次分析。