更改超时与改进编码在具有大数据表的查询中的Sql .view服务器超时

时间:2017-06-07 09:13:48

标签: sql sql-server timeout

我的数据库中有一个包含数千万行PaymentsTransactions的表格。

  • TransactionsPeriod
  • 分组
  • Periods可以有多个Transaction,一天内可以有多个Periods

我的查询代码如下:

SELECT 
    lastTrx.[Num_TPA]
    , lastTrx.periodo_max
    , lastTrx.Transacao_max
    , firstTrx.Transacao_min
    , lastTrx.Data_Hora_Ficheiro_fim
    , firstTrx.Data_Hora_Ficheiro_ini
    , DATEDIFF(Minute, firstTrx.Data_Hora_Ficheiro_ini, lastTrx.Data_Hora_Ficheiro_fim) "minutos_periodo"
FROM 
    (
        SELECT 
            [Num_TPA]
            , SUBSTRING(REPLACE(STR([Num_Per_Trx_msg_Ult_Trn], 9), SPACE(1), '0'), 1, 3) AS [periodo_max]
            , MAX(SUBSTRING(replace(str([Num_Per_Trx_msg_Ult_Trn], 9), SPACE(1), '0'), 4, 3)) [Transacao_max]
            , MAX([Data_Hora_Ficheiro]) AS [Data_Hora_Ficheiro_fim]
        FROM 
            [GPOS].[dbo].[Data_PRD_VALUES_CUBO_LIGHT]
        GROUP BY 
            [Num_TPA]
            , SUBSTRING(REPLACE(STR([Num_Per_Trx_msg_Ult_Trn], 9), SPACE(1), '0'), 1, 3)
    ) AS lastTrx
    LEFT JOIN 
    (
        SELECT 
            [Num_TPA]
            , SUBSTRING(REPLACE(STR([Num_Per_Trx_msg_Ult_Trn], 9), SPACE(1), '0'), 1, 3) AS [periodo]
            , MIN(SUBSTRING(REPLACE(STR([Num_Per_Trx_msg_Ult_Trn], 9), SPACE(1), '0'), 4, 3)) AS [Transacao_min]
            , MIN([Data_Hora_Ficheiro]) AS [Data_Hora_Ficheiro_ini]
        FROM 
            [GPOS].[dbo].[Data_PRD_VALUES_CUBO_LIGHT]
        GROUP BY 
            [Num_TPA]
            , SUBSTRING(REPLACE(STR([Num_Per_Trx_msg_Ult_Trn], 9), SPACE(1), '0'), 1, 3)
    ) AS firstTrx ON lastTrx.Num_TPA = firstTrx.Num_TPA
WHERE 
    lastTrx.periodo_max = firstTrx.periodo
    AND lastTrx.Data_Hora_Ficheiro_fim != firstTrx.Data_Hora_Ficheiro_ini
ORDER BY 
    Num_TPA
    , periodo

上面的查询需要40秒才能运行,这太长了。

当我将查询放入View时,由于超时而无法运行。

预期结果是每个终端都有一个每个时段的第一个和最后一个交易的统计数据以及每个时段之间的分钟数。

请帮我弄清楚如何:

  • 更改超时
  • 让我的查询更快地运行

0 个答案:

没有答案