Announcement

Collapse
No announcement yet.

SQL Performance

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL Performance

    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.

    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
    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
Working...
X