2017-07-27 3 views
1

Ich versuche, alle Mitarbeiter mit einer bestimmten 'Interaction' aufgelistet Ich möchte die Mitarbeiter in einer Zeile mit Komma trennen, ich habe die folgende Abfrage, die funktioniert, ist aber sehr langsam .Verketten von Ergebnissen in einer durch Komma getrennten Liste

SELECT 
CONVERT(VARCHAR(254), 
    COALESCE(
     STUFF(
      (
       SELECT 
        ', ' + LTRIM(RTRIM(REPLACE(emp1.Full_Name,CHAR(9),''))) 
       FROM Employee emp1 WITH (nolock) 
       JOIN Rn_Int_Employee rie WITH (nolock) on emp1.Employee_Id = rie.Employee_Id 
       WHERE rnint.Rn_Interactions_Id = rie.Rn_Interactions_Id 
       GROUP BY emp1.Full_Name 
       ORDER BY emp1.Full_Name 
       FOR XML PATH (''),TYPE).value('text()[1]', 'nvarchar(max)'), 1, 2, '') 
     ,STUFF((
      SELECT 
       ', ' + LTRIM(RTRIM(REPLACE(emp1.Full_Name,CHAR(9),''))) 
      FROM Employee emp1 WITH (nolock) 
      WHERE rnint.Rn_Create_User=emp1.Rn_Employee_User_Id 
      GROUP BY emp1.Full_Name 
      ORDER BY emp1.Full_Name 
      FOR XML PATH (''),TYPE).value('text()[1]', 'nvarchar(max)'), 1, 2, ''))) 
     AS Employees  
FROM Rn_Interactions rnint 

Hat jemand irgendwelche Empfehlungen für eine effizientere Art, dies zu tun?

+0

Sie können versuchen, codereview.stackexchange.com – JeffUK

+1

Buchen Sie Ihre Tabelle DDL (einschließlich Indizes) und fügen Sie die versionsspezifische SQL Server-Tag. –

+1

effizient? Ist das eine zeitaufwendige Abfrage? Wo ist der Flaschenhals (siehe Ausführungsplan)? –

Antwort

0

ich überprüft Ihre Anfrage und sehen ein paar interessante Dinge:

  • Sie sind als ein mit FOR XML PATH über die Verwendung von STUFF in Verbindung beschwert, die
  • langsam durchführen wird
  • Sie machen die wiederholte Verwendung der NOLOCK Hinweis
  • Alt JOIN Syntax

ich habe persönlich hatte sehr gute Leistung mit Verketten dieser Zeilen zu einer einzigen Zelle mit der Verwendung von STUFF und FOR XML PATH wie Sie getan haben, obwohl das Problem an Ihrem Ende ist wahrscheinlich eine Struktur, die Hilfe verwenden kann. Ich wette, dass Ihre Indexierung nicht gleichwertig ist und dass die Korrektur diese wirklich weit bringen würde.

Bitte teilen Sie Ihren Ausführungsplan mit, damit wir Sie darauf hinweisen können; Verwenden Sie auch die folgenden für einfache Planfreigabe: https://www.brentozar.com/pastetheplan/

+0

Danke - Der Plan ist hier: https://www.brentozar.com/pastetheplan/?id=SkhjeuPL- –

+0

Welche Indizes haben Sie auf 'rnint.Rn_Interactions_Id'? – Eli

+0

Ich habe einen Clustered-Index auf das ID-Feld –

Verwandte Themen