0

クエリを高速化するために特定のインデックスまたは別の構造を理解するのに助けが必要です。最初にグループ化を試みてから、次のようにグループ化された 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)

実行計画

4

1 に答える 1

0

クエリを頻繁に実行する場合は、グループごとのセクションをヘルパー テーブルに事前計算します。

また、次のように計算を簡略化できます。ISNULL([fldDDT], [fldDDT2])

于 2013-10-11T10:33:44.490 に答える