0
STUFF
とを選択してテンポラリテーブルに挿入する簡単なクエリがあります。SQL ServerプロシージャSTUFFに時間がかかりすぎる
その後、私はいくつかのパラメータに基づいて望ましい結果を得るために、この一時テーブルをメインテーブルに結合しています。しかし、それはずっと長くかかります。
テーブルのクラスター化されたインデックスを追加しました。クエリの一部がSTUFF
という結果を少し早く得ることができましたが、全体的な結果はまだまだ遅いです。
DECLARE @TEMP_ACAusVertarg TABLE
(ACAusVertag NVARCHAR(MAX),
IKLeistungserbringer INT,
Rechnungsnummer NVARCHAR(MAX)
)
INSERT INTO @TEMP_ACAusVertarg (ACAusVertag, IKLeistungserbringer, Rechnungsnummer)
SELECT
STUFF((SELECT ',' + T1.ACAusVertrag
FROM DB_DMA.REPORTING.Report_3_1_2_3_RechnungsuebersichtPapier_DTA_Ebene_2_TEMP T1
WHERE
-- Erfassungsart = '1'
T1.IKLeistungserbringer = T2.IKLeistungserbringer
AND T1.Rechnungsnummer = T2.Rechnungsnummer
ORDER BY
T2.IKLeistungserbringer, T1.ACAusVertrag
FOR XML path('')), 1, 1, '') AS ACAusVertrag,
IKLeistungserbringer, Rechnungsnummer
FROM
DB_DMA.REPORTING.Report_3_1_2_3_RechnungsuebersichtPapier_DTA_Ebene_2_TEMP T2
WHERE
T2.Erfassungsart = 1
SELECT
REPORT.Bundesland,
REPORT.Regionalkennzeichen,
REPORT.SGS,
REPORT.AC,
ACAUSVERTRAG.ACAusVertag, --NEW
REPORT.PNR,
REPORT.Rechnungsnummer,
REPORT.Zahldatum,
REPORT.IKRechnungssteller,
REPORT.NameRechnungssteller,
REPORT.StrasseRechnungssteller,
REPORT.PLZRechnungssteller,
REPORT.OrtRechnungssteller,
REPORT.IKLeistungserbringer,
REPORT.NameLeistungserbringer,
REPORT.StrasseLeistungserbringer,
REPORT.PLZLeistungserbringer,
REPORT.OrtLeistungserbringer,
SUM(REPORT.AnzahlVerordnungen) AS AnzahlVerordnungen
FROM
DB_DMA.REPORTING.Report_3_1_2_3_RechnungsuebersichtPapier_DTA_Ebene_2_TEMP REPORT WITH (NOLOCK)
INNER JOIN
@TEMP_ACAusVertarg AS ACAUSVERTRAG ON ACAUSVERTRAG.IKLeistungserbringer = REPORT.IKLeistungserbringer
WHERE
SGS = @SGS
AND AC = @AC
AND Bundesland = @Bundesland
AND Regionalkennzeichen = @Regionalkennzeichen
AND Jahr = @Jahr
AND Erfassungsart = '1'
GROUP BY
REPORT.Bundesland, REPORT.Regionalkennzeichen,
REPORT.SGS, REPORT.AC, REPORT.PNR,
REPORT.Rechnungsnummer, REPORT.Zahldatum,
REPORT.IKRechnungssteller, REPORT.NameRechnungssteller,
REPORT.StrasseRechnungssteller, REPORT.PLZRechnungssteller,
REPORT.OrtRechnungssteller,
REPORT.IKLeistungserbringer, REPORT.NameLeistungserbringer,
REPORT.StrasseLeistungserbringer,
REPORT.PLZLeistungserbringer, REPORT.OrtLeistungserbringer,
REPORT.Berichtigungsgrund,
ACAUSVERTRAG.ACAusVertag
ORDER BY
REPORT.IKLeistungserbringer
パラメータ値はSSRSレポートから来ている:
は、ここに私のコードサンプルです。何か提案してください?
ここに2つのクエリがあります。あなたはどれが一番長いかを確立しましたか? –
ちょっと@Nick.McDermaidは素早い応答に感謝します。最初の部分は20秒しかかからず、2番目の部分はTEMPテーブルとの結合で長時間かかります.10秒かかります。 – swat
最初にテンポラリテーブルを試してみてください。 https://stackoverflow.com/questions/27894/whats-the-difference-between-a-temp-table-and-table-variable-in-sql-server –