T-SQL:循环替代方法以减少执行时间

时间:2018-06-13 15:54:30

标签: sql sql-server

这是我在这里的第一篇文章,很高兴成为我已经关注了很长时间的社区的一员!尽管有研究,我还没有找到关于这个特定主题的信息,所以我在这里。

我分析交易数据以了解财务利润率的发展​​,分离不同的影响,如数量,组合,价格,成本等。 该分析需要在不同的粒度级别进行,例如,限于某一地理范围或特定产品类别。 (可能达到80k +分析水平)

我需要在一个批次中计算这些结果,以将它们存储到Excel工具中。

这样做:

  1. 我有一个第一个程序(带有索引,连接等的450行)和10个输入变量,返回一个单行表,其中包含1级分析所需的输出(在上面提到的80k +中)。它目前需要45秒才能运行。 [努力减少时间 - 单独的问题]

  2. 我想估计80k +输入排列的第一个程序。我在下面的代码的第二部分运行在一个简单的输入集上。但是,处理所有排列需要很长时间......

  3.   

    还有其他更快的方法吗?例如考虑可能的排列表和事务数据之间的连接?   你会做些什么来提高性能?

    declare @TimeframeVar varchar(55)
    declare @EndMonthVar float
    declare @EndPeriodVar float
    declare @BUVar varchar(55)
    ...
    declare @RegionVar varchar(55)
    declare @BranchVar varchar(55)
    ...
    declare @ProductCategoryVar varchar(55)
    ...
    
    drop table #Variables
    
    Select * 
    into #variables 
    from xx.Variables
    
    
    while exists (select top 1 * from #variables)
    BEGIN
    
    set @TimeframeVar = ( select top 1 Timeframe from #Variables )
    set @EndMonthVar = ( select top 1 EndMonth from #Variables )
    set @EndPeriodVar = ( select top 1 EndPeriod from #Variables )
    set @BUVar = ( select top 1 BU from #Variables )
    ...
    set @RegionVar = ( select top 1 Region from #Variables )
    set @BranchVar = ( select top 1 Branch from #Variables )
    ...
    set @ProductCategoryVar = ( select top 1 ProductCategory from #Variables )
    ...
    
    exec xx.MarginAnalysis_XX
     @TimeframeVar
    ,@EndMonthVar
    ,@EndPeriodVar
    ,@BUVar
    ...
    ,@RegionVar 
    ,@BranchVar
    ...
    ,@ProductCategoryVar
    ...
    
    Delete from #variables
    where Timeframe = @TimeframeVar
      and EndMonth = @EndMonthVar
      and EndPeriod = @EndPeriodVar
      and BU = @BUVar
    ...
      and region = @RegionVar 
      and Branch = @BranchVar
    ...
      and productcategory = @ProductCategoryVar
      and ordersize = @OrderSizeVar
    ...
    
    END 
    

    非常感谢你的帮助!

    编辑:

    预期最终输出(80k +行)

    +-------------+-----------+--------+-------+-----+-------------+
    | Granularity | MarginIni | Volume | Price | ... | MarginFinal |
    +-------------+-----------+--------+-------+-----+-------------+
    | A           | 100       | +20    | -30   |     | 90          |
    +-------------+-----------+--------+-------+-----+-------------+
    | B           | 200       | 150    | -30   |     | 320         |
    +-------------+-----------+--------+-------+-----+-------------+
    | C           | ..        | ...    | ...   |     | ...         |
    +-------------+-----------+--------+-------+-----+-------------+
    

    INPUT FROM 1st PROC (有1行)

    +-------------+-----------+--------+-------+-----+-------------+
    | Granularity | MarginIni | Volume | Price | ... | MarginFinal |
    +-------------+-----------+--------+-------+-----+-------------+
    | A           | 100       | +20    | -30   |     | 90          |
    +-------------+-----------+--------+-------+-----+-------------+
    

0 个答案:

没有答案