0

質問があります

SELECT Brand,
        UEI_ID,
        Concat_Prd_Id = Stuff((
                        SELECT ',' + CAST(Second_ID AS VARCHAR(max))
                        FROM Temp1 t2
                        WHERE t1.Brand = t2.Brand
                                AND t1.UEI_ID = t2.UEI_ID
                        FOR XML Path('')
                        ), 1, 1, '')
FROM Temp1 t1
GROUP BY Brand,
        UEI_ID 

これは、26,000レコードの実行に8.48分かかります。

時間を短縮する方法を教えてください...?

4

2 に答える 2

2

最初にインデックスを追加します(テーブルを参照する他のクエリに依存します)。次のようなものがそれを行う必要があります。

CREATE NONCLUSTERED INDEX IX_Temp1 ON Temp1 (Brand, UEI_ID) INCLUDE Second_ID

おそらく整数であり、実行時間は改善されないため、状況に当てはまるとは思いませんがSecond_ID、XMLを使用して、value文字列と特殊文字の連結を考慮することをお勧めします。

例えば

SELECT Brand,
        UEI_ID,
        Concat_Prd_Id = STUFF((
                        SELECT ',' + CAST(Second_ID AS VARCHAR(MAX))
                        FROM Temp1 t2
                        WHERE t1.Brand = t2.Brand
                                AND t1.UEI_ID = t2.UEI_ID
                        FOR XML PATH(''), TYPE
                        ).value('.', 'NVARCHAR(MAX)', 1, 1, '')
FROM Temp1 t1
GROUP BY Brand,
        UEI_ID 
于 2012-09-05T07:30:13.890 に答える
1

IndexonBRANDとを追加していない場合は、UEI_IDこの構文を使用してテーブルを変更できます。

ALTER TABLE tablename ADD INDEX indexName (columnName);

だからあなたの場合、あなたはこれを行うことができます

ALTER TABLE Temp1 ADD INDEX IDX_Brand (Brand);
ALTER TABLE Temp1 ADD INDEX IDX_UEI_ID (UEI_IDd);
于 2012-09-05T06:31:15.473 に答える