クエリを高速化するために特定のインデックスまたは別の構造を理解するのに助けが必要です。最初にグループ化を試みてから、次のようにグループ化された CTE から結果を選択しました... http://codeidol.com/sql/sql- performance-tuning/GROUP-BY/Optimal-GROUP-BY-Clauses/
しかし、私はそれを一掃するだけになりました。以下は基本的なクエリで、2 分かかり、730,000 レコードをクエリし、ソートに 91% のコストがかかります。ほとんどがグループ化に向かっていると想定しています。少なくとも1分にするには、これが本当に必要です。
クエリ:
SELECT
tblFLS.fldFN,
tblFLS.fldRN,
tblFC.fldFC,
tblFC.fldCity,
tblFC.fldState,
tblFLS.fldIN,
tblUL.fldPRK,
tblUL.fldLN,
tblUA.fldANA,
tblUA.fldMTH,
(CASE
WHEN (ISNULL([fldDTT], '') = '') THEN [fldDTT2]
ELSE [fldDTT]
END) AS fldDate,
tblUA.fldPG
FROM tblUA
INNER JOIN tblUL ON tblUA.fldULKey = tblUL.fldULID
INNER JOIN tblFLS ON tblUL.fldFileKey = tblFLS.fldFileID
INNER JOIN tblFC ON tblFLS.fldFacKey = tblFC.fldFacID
GROUP BY
tblFLS.fldFN,
tblFLS.fldRN,
tblFC.fldFC,
tblFC.fldCity,
tblFC.fldState,
tblFLS.fldIN,
tblUL.fldPRK tblUL.fldLN,
tblUA.fldANA,
tblUA.fldMTH,
(CASE
WHEN (ISNULL([fldDDT], '') = '') THEN [fldDDT2]
ELSE [fldDDT]
END),
tblUA.fldPG
テーブル構造:
tblUA -- 850,000 rows, clustered Index on fldUAID
fldULK... INT
fldUAID... INT
fldALY... NVARCHAR(10)
fldAK... INT
fldMTH... NVARCHAR(15)
fldMK... INT
fldMMK... TINYINT
fldUNI... NVARCHAR(10)
fld7... INT
fld8... TINYINT
fld9...TINYINT
fld10...TINYINT
tblUL -- 200,000 rows, clustered Index on fldULID
fldULID... INT
fldFK... INT
fldPRK... INT
fld2... INT
fld3... INT
fldLN... NVARCHAR(15)
fldDTT... DATETIME
fldDTT2... DATETIME
tblFLS -- 70,000 rows, clustered Index on Primary Key, Non-Unique Non-Clustered On: fldDV, fldFK, fldIN, fldMK
fldFN... NVARCHAR(255)
fldRN... NVARCHAR(255)
fldIN... NVARCHAR(100)
fldDV... NVARCHAR(5)
fldM... NVARCHAR(100)
fldMK... INT
fldINC... NVARCHAR(10)
fldIDN... NVARCHAR(30)
fldDTA... NVARCHAR(50)
tblFC -- 10,000 records, clustered Index on Primary Key, Non-Unique Non-Clustered on fldFCID
fldFCID... INT
fldFC..NVARCHAR(100)
fldADDR... NVARCHAR(50)
fldADDR2... NVARCHAR(50)
fldCity... NVARCHAR(50)
fldState... NVARCHAR(10)