Hallo,
ich habe folgendes Performance Problem:
Ich habe ein Query welcher 7 Subselects durchführt und dieser Query wird entweder 25, 50, 75 o. 100 mal, abhängig von der Anzahl der angezeigten Einträge, hintereinander ausgeführt.
Ergo es werden bis zu 800 Querys los gejagt.
Hat vielleicht jemand eine Idee wie ich das ganze optimieren könnte?
Hier mal der Query:
Die Subselects suchen mir lediglich alle Items mit dem jeweiligen "callstatus".
ich habe folgendes Performance Problem:
Ich habe ein Query welcher 7 Subselects durchführt und dieser Query wird entweder 25, 50, 75 o. 100 mal, abhängig von der Anzahl der angezeigten Einträge, hintereinander ausgeführt.
Ergo es werden bis zu 800 Querys los gejagt.
Hat vielleicht jemand eine Idee wie ich das ganze optimieren könnte?
Hier mal der Query:
PHP-Code:
protected function evsrn()
{
$sStatement = 'SELECT DISTINCT
cdr1.quellrufnummer,
COUNT(cdr1.id) AS anzahl,
IFNULL( SUM(cdr1.billsec)/60 , 0) as minuten,
CONCAT(
ROUND(
( SUM(cdr1.callstatus_id = 1) / COUNT(cdr1.id) ) * 100,
0
),
\\'%\\'
) AS erfolgsquote,
(SELECT DISTINCT
COUNT(*)
FROM cdr.verbindungen AS cdr2
WHERE cdr2.callstatus_id = \\'1\\'
AND cdr2.quellrufnummer = cdr1.quellrufnummer LIMIT 1) AS answer,
(SELECT DISTINCT
COUNT(*)
FROM cdr.verbindungen AS cdr2
WHERE cdr2.callstatus_id = \\'2\\'
AND cdr2.quellrufnummer = cdr1.quellrufnummer LIMIT 1) AS busy,
(SELECT DISTINCT
COUNT(*)
FROM cdr.verbindungen AS cdr2
WHERE cdr2.callstatus_id = \\'3\\'
AND cdr2.quellrufnummer = cdr1.quellrufnummer LIMIT 1) AS cancel,
(SELECT DISTINCT
COUNT(*)
FROM cdr.verbindungen AS cdr2
WHERE cdr2.callstatus_id NOT IN(\\'1\\')
AND cdr2.quellrufnummer = cdr1.quellrufnummer LIMIT 1) AS chanunavail,
(SELECT DISTINCT
COUNT(*) FROM cdr.verbindungen AS cdr2
WHERE cdr2.callstatus_id = \\'5\\'
AND cdr2.quellrufnummer = cdr1.quellrufnummer LIMIT 1) AS congestion,
(SELECT DISTINCT
COUNT(*) FROM cdr.verbindungen AS cdr2
WHERE cdr2.callstatus_id = \\'8\\'
AND cdr2.quellrufnummer = cdr1.quellrufnummer LIMIT 1) AS noanswer,
(SELECT DISTINCT
COUNT(*) FROM cdr.verbindungen AS cdr2
WHERE cdr2.callstatus_id NOT IN(\\'1\\', \\'2\\', \\'3\\', \\'5\\', \\'8\\')
AND cdr2.quellrufnummer = cdr1.quellrufnummer LIMIT 1) AS other
FROM cdr.verbindungen AS cdr1
GROUP BY cdr1.quellrufnummer';
return $sStatement;
}
Die Subselects suchen mir lediglich alle Items mit dem jeweiligen "callstatus".
Kommentar