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它可能是一个整数,并且不会提高执行时间,但使用 XMLvalue来说明连接带有特殊字符的字符串是一个好习惯。

例如

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

如果您尚未添加Indexon BRANDand 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 回答