Auf Thema antworten

Hi. Ich habe hier noch so eine Abfrage wo man sicher noch Performance rausholen kann. Im Unterschied zu der oberen Abfrage geht diese über mehrere Tabellen:


[code=SQL]

SELECT DISTINCT t.id,

             t.tnumber,

             c.company,

             t.user29,

             t.status,

             IF (d.Zeit IS NULL, f.Zeit, d.Zeit) AS Zeit,

             IFNULL(d.Aktionen, 0) + IFNULL(f.Anrufe, 0) AS Aktionen,

             IFNULL(z.Aktionen, 0) + IFNULL(f.Anrufe, 0) AS AktGesamt

FROM crmdb.tickets t JOIN crmdb.contacts c ON t.cid = c.id 

        LEFT JOIN (SELECT COUNT(a.id) AS Aktionen,

                                       a.ticket_id,

                                       from_unixtime(a.chgtime, '%H:%i') AS Zeit

                          FROM crmdb.tickets t JOIN crmdb.ticket_actions a ON t.id = a.ticket_id

                          WHERE a.createuser =59

                          AND from_unixtime(a.action_date, '%Y-%m-%d') = '2019-10-01'

                          GROUP BY t.tnumber) d ON t.id = d.ticket_id

        LEFT JOIN (SELECT COUNT(l.ttid) AS Anrufe,

                                       l.ttid,

                                       from_unixtime(l.chgtime, '%H:%i') AS Zeit

                          FROM crmdb.tickets t JOIN crmdb.calls l ON t.id = l.ttid

                          WHERE l.createuser =59

                          AND from_unixtime(l.createtime, '%Y-%m-%d') = '2019-10-01'

                         GROUP BY t.tnumber) f ON t.id = f.ttid

        LEFT JOIN (SELECT COUNT(a.id) AS Aktionen,

                                       a.ticket_id

                          FROM crmdb.tickets t JOIN crmdb.ticket_actions a ON t.id = a.ticket_id

                          GROUP BY t.tnumber) z ON t.id = z.ticket_id 

WHERE t.id IN (SELECT DISTINCT a.ticket_id 

                         FROM crmdb.ticket_actions a 

                         WHERE a.ticket_id = t.id AND a.createuser =59

                         AND from_unixtime(a.action_date, '%Y-%m-%d') = '2019-10-01') 

                         OR t.id IN (SELECT DISTINCT l.ttid

                         FROM crmdb.calls l

                         WHERE l.ttid = t.id

                         AND l.createuser =59

                         AND from_unixtime(l.createtime, '%Y-%m-%d') = '2019-10-01')

GROUP BY t.tnumber

[/code]


Die Abfrage funktioniert, nur eben langsam... kann mir jemand helfen ?



Oben