my query copied below runs too slow when I add the group by to the SQL statement as shown below. I works ok without the group by. I have rebuilt all the indexes involved. Please advise on what should I check?
Thank you for your help in advance
select TOP 10
ISNULL(DT.PERIOD_ID, -99) as PERIOD_ID,
DT.YEAR,
LKPA.TOTALING_LEVEL_A AS REPORT_TYPE,
A.ACCT_TYPE AS ACCT_TYPE_ID,
case when min(A.TB_STATUS) = 0 then 'TRUE' else 'FALSE' end as ACTIVEACCOUNT,
'USD' as ACCOUNTCURRENCY,
DT.PERIOD_END_DATE as PERIOD_END_DATE,
CASE WHEN LKPA.TOTALING_LEVEL_A = 'BAL SH'
and LKPA.TOTALING_LEVEL_B = 'TOT LI & SUR'
THEN CAST((B.PTD_BAL_AMT * -1 ) AS MONEY)
ELSE CAST(B.PTD_BAL_AMT AS MONEY)
END as GL_ACCT_BAL,
1 AS TIMEFRAME_ID,
ISNULL(DC.DIM_ID, -99) AS COMPANY_ID,
ISNULL(LKPA.DIM_ID, -99) AS CHART_OF_ACCOUNTS_ID,
LKPA.CCTR AS CCTR_ID
,AD.DIM_ID AS ACCOUNT_DESCRIPTION_ID
,A.ACCT_CODE
from SOL.VIEW_DIM_TIME DT WITH(NOLOCK),
[REMOTETEST].[GL].[dbo].[APBL] B WITH(NOLOCK)
join [REMOTETEST].[GL].[dbo].[ACCT] A WITH(NOLOCK)
on (A.ACCT_INT_CODE = B.ACCT_INT_CODE)
Join SOL.[LKP_COA] LKPA WITH(NOLOCK)
ON LKPA.ACCT_CODE = SUBSTRING(A.ACCT_CODE,3,22)
AND LKPA.TOTALING_LEVEL_A NOT IN ('BEXP', 'SOEXP')
join [REMOTETEST].[GL].[dbo].[ACTC] C WITH(NOLOCK)
on (substring(A.ACCT_CODE, 3, 7) = C.ACCT_CODE)
left outer join [REMOTETEST].[GL].[dbo].[BLSK] BAL WITH(NOLOCK)
on (B.BAL_SK = BAL.BAL_SK)
left outer join [REMOTETEST].[GL].[dbo].[CALP] CAL WITH(NOLOCK)
on (B.CAL_SK = CAL.CAL_SK)
left outer join [REMOTETEST].[GL].[dbo].[ABRL] RUL WITH(NOLOCK)
on ( BAL.BAL_CODE = RUL.BAL_CODE)
LEFT OUTER JOIN SOL.DIM_COMPANY DC WITH(NOLOCK)
ON SUBSTRING(A.ACCT_CODE,1,2) = DC.BUSINESSKEY
LEFT OUTER JOIN [SNL].[DIM_ACCOUNT_DESCRIPTION] AD WITH(NOLOCK)
ON ISNULL(NULLIF(A.ACCT_DESC,''), 'UNKNOWN') = AD.[ACCOUNT_DESCRIPTION]
where
A.FLX_PRS_OWNER = 'IIF'
and A.FLX_PRS_OWNER = 'IIF'
and B.FLX_PRS_OWNER = 'IIF'
and C.FLX_PRS_OWNER = 'IIF'
and BAL.FLX_PRS_OWNER = 'IIF'
and CAL.FLX_PRS_OWNER = 'IIF'
and RUL.FLX_PRS_OWNER = 'IIF'
and ISNULL(A.ACCT_TYPE, -99) <> 5
and B.BAL_SK = '1'
and BAL.CURR_TYPE = '0'
and RUL.BAL_TYPE = '0'
and CAL.PER_NO <> '400'
AND LKPA.TOTALING_LEVEL_A NOT IN ('BEXP', 'SOEXP')
and CONVERT(DATE,CAL.PER_END_DATE) BETWEEN DT.PERIOD_START_DATE AND DT.PERIOD_END_DATE
and CAL.PER_END_DATE <= DT.PERIOD_END_DATE
AND DT.YEAR >=2008
AND SUBSTRING(A.ACCT_CODE,1,2) = '01'
and CAST(B.PTD_BAL_AMT AS MONEY) <> 0.00
and DT.DIMID = 20160601
group by
CAL.PER_END_DATE
,LKPA.TOTALING_LEVEL_A
,A.ACCT_TYPE
,DC.[DESCRIPTION]
,DT.PERIOD_ID
,DT.PERIOD_END_DATE
,CAST(B.PTD_BAL_AMT AS MONEY)
,DC.DIM_ID
,LKPA.DIM_ID
,LKPA.CCTR
,DT.YEAR
,AD.DIM_ID
,A.ACCT_CODE
,LKPA.TOTALING_LEVEL_B