0

この SQL クエリをより効率的にするにはどうすればよいですか? 以下に示す CteFinal コードは、クエリに最大 6 分を追加したクエリの一部です。cteMonth を以下に示します。cteDetail は、データベースから情報を直接取得する別の cte であり、実行に 1 秒もかかりません。

CteFinal が行っているのは、f.FiscalPeriod=0 の行の列データの一部を含めながら、不足している会計期間の行を作成することです。

これは ERP データベースであり、これらの種類の変更を行うことは許可されていないため、テーブルのインデックスを追加、削除、または変更することはできません。

CteFinal:

SELECT      Account,Month, CONVERT(DATETIME, CAST(@Year as varchar(4)) + '-' + CAST(Month as VARCHAR(2)) + '-' + '01', 102) JEDate
        ,accountdesc,'' Description,'' JournalCode,NULL JournalNum,NULL JournalLine
        ,'' LegalNumber,'' CurrencyCode,0.00 DebitAmount,0.00 CreditAmount,fiscalcalendarid,company,bookid,SegValue2,SegValue1,SegValue3,SegValue4

FROM        cteDetail f
        CROSS JOIN cteMonths m

WHERE       f.FiscalPeriod=0 and not exists(select * from cteDetailADDCreatedZero x where x.Account=f.Account and x.FiscalPeriod=Month)

CteMonth:

cteMonths (Month) AS(
select 0 as Month
UNION select 1 as Month
UNION select 2 as Month
UNION select 3 as Month
UNION select 4 as Month
UNION select 5 as Month
UNION select 6 as Month
UNION select 7 as Month
UNION select 8 as Month
UNION select 9 as Month
UNION select 10 as Month
UNION select 11 as Month
UNION select 12 as Month)

ありがとうございました!

4

2 に答える 2

0

1 つの可能性は、SQL ビューを物理化することです (クエリがビューの場合)。複雑なクエリを含むビューが遅い場合があります。

于 2021-01-11T11:03:14.813 に答える