在sql server中进行组连接以获得多个列组的性能

时间:2017-06-20 20:29:00

标签: sql sql-server tsql

我目前在SQL server 2005工作,表包含数百万行。 该表具有以下行和列

ID      PO_ID   Event_ID  Item_ID 
1        22        970     123456
1        22        970     123457
1        23        970     1234589
1        22        971     12345790
1        22        971     12345792

我想为多列组" ID,PO_ID,Event_ID"连接列item_ID; 输出将是这样的

 ID      PO_ID   Event_ID    Item_ID 
  1        22        970     123456,123457
  1        23        970     1234589
  1        22        971     12345790,12345792

我有以下SQL查询

select ID, PO_ID, Event_ID,
       substring(
                   ( SELECT ','+ Item_ID)
                    FROM table as a
                    WHERE a.ID=table.ID
                    AND  a.PO_ID=table.PO_ID
                    and a.event_ID=table.event_ID
                    FOR XML PATH ('') 
                     )
from table 
group by ID,PO_ID,Event_ID;

但是这个查询在性能方面确实很慢 有没有在SQL Server 2005中执行此操作的优化方法? 任何帮助将不胜感激。

注意:我没有权限创建UDF或索引。

2 个答案:

答案 0 :(得分:0)

我建议将其写成:

select ID, PO_ID, Event_ID,
       stuff( (select ',' + a.Item_ID)
               from table a
               where a.ID = t.ID and
                     a.PO_ID = t.PO_ID and
                     a.event_ID = t.event_ID
               FOR XML PATH ('') 
              ), 1, 1, ''
             ) as items
from (select distinct ID, PO_ID, Event_ID
      from table t
     ) t;

然后,为了提高性能,您需要(ID, PO_ID, Event_ID, Item_Id)上的索引。

答案 1 :(得分:0)

您可以在桌面上创建一个可以帮助您的索引