Hallo,
ich hoffe Ihr könnt mir helfen. Ich habe da ein kleines Performance Problem mit meinen SQL Abfragen. Es handelt sich um 7 SQL Abfragen mit denen ich Reports für ein Incident Management System erstelle. Da ich mich noch nicht lange mit SQL Abfragen beschäftige habe ich so gut es geht die Abfragen zusammen gebastelt. So nach dem Motto hauptsache es funktioniert.
Mit Hilfe der 7 Abfragen erzeuge ich dann 22 Diagramme, die in den Report gepackt werden. Das ganze läuft alles über den MS SQL Server 2005. Ich weiß nun nicht genau ob pro Diagramm die dazugehörige Abfrage aufgerufen wird oder ob alle Abfragen aufgerufen und dann zwischen gespeichert werden.
Nun zu meinen SQL Abfragen. Die Abfragen sind alle ähnlich aufgebaut.
Es wäre super wenn ihr mir ein paar Tips geben könntet, wie ich die Abfrage verbessern kann um eine Höhere Performance zu erreichen? Ich habe schon etwas gefunden, das Subquerys die Performance verschlechtern, aber ich bekomm es leider nicht anders hin.
Schon einmal ein Dankeschön
Gruß Bilbo
ich hoffe Ihr könnt mir helfen. Ich habe da ein kleines Performance Problem mit meinen SQL Abfragen. Es handelt sich um 7 SQL Abfragen mit denen ich Reports für ein Incident Management System erstelle. Da ich mich noch nicht lange mit SQL Abfragen beschäftige habe ich so gut es geht die Abfragen zusammen gebastelt. So nach dem Motto hauptsache es funktioniert.
Mit Hilfe der 7 Abfragen erzeuge ich dann 22 Diagramme, die in den Report gepackt werden. Das ganze läuft alles über den MS SQL Server 2005. Ich weiß nun nicht genau ob pro Diagramm die dazugehörige Abfrage aufgerufen wird oder ob alle Abfragen aufgerufen und dann zwischen gespeichert werden.
Nun zu meinen SQL Abfragen. Die Abfragen sind alle ähnlich aufgebaut.
Code:
SELECT Month(a.CreatedDateTime) AS Month, Year(a.CreatedDateTime) AS Year, COUNT(DISTINCT a.IncidentNumber) AS TotalTickets, COUNT(DISTINCT CASE WHEN DATEDIFF(mi, a.CreatedDateTime, a.ResolutionEndTime) <= 60 THEN CASE WHEN a.LoginID LIKE a.Owner THEN a.ParentLink_RecID END END) AS FirstCallResolution, a.SubCategory FROM ( SELECT i.IncidentNumber, i.CreatedDateTime, i.ResolutionEndTime, p.LoginID, i.Owner, j.ParentLink_RecID, (i.Category + ' / ' + i.SubCategory) AS SubCategory FROM dbo.Incident AS i INNER JOIN dbo.Profile AS p ON i.CreatedByRecID = p.RecID INNER JOIN dbo.Journal AS j ON j.ParentLink_RecID = i.RecId WHERE (i.CreatorSOName = @SupportOrg) AND (j.JournalIncidentCategory NOT IN( 'Accept Info', 'Forward Info' , 'Reopen')) AND CONVERT(char(10), i.CreatedDateTime, 111) >= CASE WHEN @Month < 12 THEN CONVERT(char(4), (CONVERT(decimal, @Year) - 1)) + '/' + @Month + '/01' ELSE @Year + '/01/01' END AND CONVERT(char(10), i.CreatedDateTime, 111) <= @Year + '/' + @Month + '31' AND (i.status IN ('Resolved', 'Closed')) AND (i.CreatorOwnerTeam LIKE @SupportOrg) AND (i.CreatedBy NOT IN (SELECT DISTINCT OwnerDisplayName FROM dbo.Incident WHERE OwnerTeam = 'Second Level')) ) AS a GROUP BY Month(a.CreatedDateTime), Year(a.CreatedDateTime), a.SubCategory ORDER BY Year(a.CreatedDateTime) DESC, Month(a.CreatedDateTime) DESC
Schon einmal ein Dankeschön
Gruß Bilbo