2017-05-03 4 views
-3

Ich habe Abfrage unter:MySQL-Abfrage nimmt zu viel Zeit

SELECT t.t_id 
    , t.usr_idx 
    , t.t_is_for 
    , t.tg_ids 
    , t.created_time 
    , t.allow_reply 
    , u.usr_name 
    , u.usr_avatar 
    , u.show_profile 
    , IF(u.usr_timeline != '',CONCAT('https://s3.amazonaws.com/tuurnts3thumbnail/',u.usr_timeline),'') as usr_timeline 
    , u.node_userid 
    , t.t_time 
    FROM tuu_tuurnt t 
    JOIN tuu_user u 
    ON t.usr_idx = u.usr_idx 
    AND u.usr_state = 1 
    LEFT 
    JOIN tuu_post p 
    ON t.t_id = p.t_id 
    AND p.usr_idx = 44756 
    LEFT 
    JOIN tuu_friend f 
    ON f.frd_my_idx = 44756 
    AND f.frd_your_idx = t.usr_idx 
    LEFT 
    JOIN tuu_friend fl 
    ON fl.frd_your_idx = 44756 
    AND fl.frd_my_idx = t.usr_idx 
WHERE t.status = 0 
    AND NOT EXISTS (SELECT b.tuu_b_by_usr_idx 
         FROM tuu_blocked as b 
        WHERE b.tuu_b_usr_idx = 44756 
         AND t.usr_idx = b.tuu_b_by_usr_idx 
       )  
GROUP 
    BY t.t_id  
ORDER 
    BY t.t_time DESC 
    , t.t_id DESC  
LIMIT 0,30; 

Es dauert fast 7-8 zweites Ergebnis zu geben, aber wenn ich um durch t.t_time entfernen und t.t_id dann läuft es innerhalb 1 sek max.

Gibt es etwas, was ich falsch mache?

+1

Machen Sie sich etwas Mühe, Ihre Anfrage zu formatieren. –

+0

Wenn keine Aggregationsfunktionen vorhanden sind, ist die Aufnahme einer GROUP BY-Klausel im Allgemeinen ein sicheres Zeichen, dass Sie keine Ahnung haben, was Sie tun. Was machst du? Um zu antworten, sehen Sie http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very- simple-sql-query – Strawberry

+0

Bitte fügen Sie 'EXPLAIN' zu Ihrer Frage hinzu. Es zeigt den Index an, den MySQL tatsächlich für die ORDER BY-Klausel verwendet hat. – Alexander

Antwort

0

Ohne einen Index muss MySQL mit der ersten Zeile beginnen und dann die gesamte Tabelle durchlesen, um die relevanten Zeilen zu finden. Je größer der Tisch, desto mehr kostet das. Details siehe How MySQL Uses Indexes. Siehe auch this topic über die Verwendung von Indizes und Aliasen zusammen.

+0

Vielen Dank für Ihre Antwort, wie Sie Reihenfolge von t_time sehen, die Zeit braucht. und das ist bereits indiziert. wenn ich die Reihenfolge der Arbeiten nur innerhalb einer Sekunde erledige. – uks

Verwandte Themen