Hallo an alle.
Vielleicht kann mir hier ja jemand ein Tipp geben.
Ich habe ein SQL String von meinem Nachrichtensystem. Dieser brauchte zuerst 6 Sekunden. Auf 2.5 Sekunden habe ich ihn schon bekommen, aber ein kleiner Fehler ist da immer noch drinne.
Der SQL String soll mir die ID vom Absender ermitteln.
Eine Antwort ID für den Naachrichtenverlauf.
Das Datum der Nachricht.
Ob Nachricht gelesen oder ungelesen wurde.
Die Nachricht.
Die Anzahl der Nachrichten vom Empfänger.
Die Anzahl der Nachrichten vom Sender.
Ob der Empfänger gelöscht wurde.
Ob der Empfänger einen geblockt hat.
Ob man selber den Empfänger blockt.
Also das Problem liegt wohl beim
Aber wie kann man das noch optimieren?
Vielleicht kann mir hier ja jemand ein Tipp geben.
Ich habe ein SQL String von meinem Nachrichtensystem. Dieser brauchte zuerst 6 Sekunden. Auf 2.5 Sekunden habe ich ihn schon bekommen, aber ein kleiner Fehler ist da immer noch drinne.
Der SQL String soll mir die ID vom Absender ermitteln.
Eine Antwort ID für den Naachrichtenverlauf.
Das Datum der Nachricht.
Ob Nachricht gelesen oder ungelesen wurde.
Die Nachricht.
Die Anzahl der Nachrichten vom Empfänger.
Die Anzahl der Nachrichten vom Sender.
Ob der Empfänger gelöscht wurde.
Ob der Empfänger einen geblockt hat.
Ob man selber den Empfänger blockt.
PHP-Code:
// Das war der erste orginale SQL String.
// 6 sekunden
$sql = "SELECT
a.user_id_aus,
a.antwort_id,
DATE_FORMAT(a.datum_gesendet,'%d.%m.%y %H:%i') datum_gesendet,
IF(a.datum_gelesen,0,1) ungelesen,
a.nachricht,
COUNT(DISTINCT(b.nachrichten_id)) a,
COUNT(DISTINCT(c.nachrichten_id)) b,
d.del_user_id,
COUNT(e.sperre_id) gesperrt,
COUNT(f.sperre_id) ist_gesperrt
FROM ".NACHRICHTEN." a
LEFT JOIN ".NACHRICHTEN." b
ON (b.user_id_ein='".escape($user->user_id)."'
OR b.user_id_aus='".escape($user->user_id)."')
AND b.del_ein =0
LEFT JOIN ".NACHRICHTEN." c
ON (c.user_id_ein=a.user_id_aus
OR c.user_id_aus=a.user_id_aus)
AND c.del_aus =0
LEFT JOIN ".USER." d ON d.user_id=a.user_id_aus
LEFT JOIN ".SPERRE." e
ON e.user_id = a.user_id_aus
AND e.user_id_gesperrt = '".escape($user->user_id)."'
AND e.del = 0
LEFT JOIN ".SPERRE." f
ON f.user_id = '".escape($user->user_id)."'
AND f.user_id_gesperrt = a.user_id_aus
AND f.del = 0
WHERE a.nachrichten_id='".escape($_GET['_id'])."'
AND a.user_id_ein='".escape($user->user_id)."'
AND a.del_ein =0
GROUP BY a.nachrichten_id
LIMIT 1;";
// Nach der Änderung von LEFT JOIN in INNER JOIN
// Die Änderung habe ich mit [COLOR=green]grün[/COLOR] gekennzeichnet
// 2.5 Sekunden
$sql = "SELECT
a.user_id_aus,
a.antwort_id,
DATE_FORMAT(a.datum_gesendet,'%d.%m.%y %H:%i') datum_gesendet,
IF(a.datum_gelesen,0,1) ungelesen,
a.nachricht,
COUNT(DISTINCT(b.nachrichten_id)) a,
COUNT(DISTINCT(c.nachrichten_id)) b,
d.del_user_id,
COUNT(e.sperre_id) gesperrt,
COUNT(f.sperre_id) ist_gesperrt
FROM ".NACHRICHTEN." a
[COLOR=green]INNER JOIN[/COLOR] ".NACHRICHTEN." b
ON (b.user_id_ein='".escape($user->user_id)."'
OR b.user_id_aus='".escape($user->user_id)."')
AND b.del_ein =0
[COLOR=green]INNER JOIN[/COLOR] ".NACHRICHTEN." c
ON (c.user_id_ein=a.user_id_aus
OR c.user_id_aus=a.user_id_aus)
AND c.del_aus =0
LEFT JOIN ".USER." d ON d.user_id=a.user_id_aus
LEFT JOIN ".SPERRE." e
ON e.user_id = a.user_id_aus
AND e.user_id_gesperrt = '".escape($user->user_id)."'
AND e.del = 0
LEFT JOIN ".SPERRE." f
ON f.user_id = '".escape($user->user_id)."'
AND f.user_id_gesperrt = a.user_id_aus
AND f.del = 0
WHERE a.nachrichten_id='".escape($_GET['_id'])."'
AND a.user_id_ein='".escape($user->user_id)."'
AND a.del_ein =0
GROUP BY a.nachrichten_id
LIMIT 1;";
// Sobald ich die eine Tabelle weglasse,
// die die Anzahl der Gesamtnachrichten vom Nachrichtensender ermittelt
// geht die Zeit runter.
// Die Änderung habe ich mit [COLOR=green]grün[/COLOR] gekennzeichnet
// 0.0068 Sekunden
$sql = "SELECT
a.user_id_aus,
a.antwort_id,
DATE_FORMAT(a.datum_gesendet,'%d.%m.%y %H:%i') datum_gesendet,
IF(a.datum_gelesen,0,1) ungelesen,
a.nachricht,
COUNT(DISTINCT(b.nachrichten_id)) a,
d.del_user_id,
COUNT(e.sperre_id) gesperrt,
COUNT(f.sperre_id) ist_gesperrt
FROM ".NACHRICHTEN." a
INNER JOIN ".NACHRICHTEN." b
ON (b.user_id_ein='".escape($user->user_id)."'
OR b.user_id_aus='".escape($user->user_id)."')
AND b.del_ein =0
[COLOR=green] hier ein INNER JOIN weggenommen [/COLOR]
LEFT JOIN ".USER." d ON d.user_id=a.user_id_aus
LEFT JOIN ".SPERRE." e
ON e.user_id = a.user_id_aus
AND e.user_id_gesperrt = '".escape($user->user_id)."'
AND e.del = 0
LEFT JOIN ".SPERRE." f
ON f.user_id = '".escape($user->user_id)."'
AND f.user_id_gesperrt = a.user_id_aus
AND f.del = 0
WHERE a.nachrichten_id='".escape($_GET['_id'])."'
AND a.user_id_ein='".escape($user->user_id)."'
AND a.del_ein =0
GROUP BY a.nachrichten_id
LIMIT 1;";
PHP-Code:
INNER JOIN ".NACHRICHTEN." c
ON (c.user_id_ein=a.user_id_aus
OR c.user_id_aus=a.user_id_aus)
AND c.del_aus =0
Kommentar